版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
生產實習報告題目:音樂播放器學生姓名:張凡學號:201220220123班級:1222201專業(yè):數字媒體技術指導教師:張金2015年08月08日目錄TOC\o"1-4"\h\u6576一、引言 3241691.1項目背景 3168461.2項目研究的目的 4111071.3安卓簡介 431246二.功能分析 5224612.1功能需求分析 5147822.2系統(tǒng)性能需求 6146582.3運行環(huán)境需求 610126三.程序詳細設計 6249113.1主界面的設計 611643.2播放界面設計 11199693.3其他功能 1410768四.調試與運行 18140304.1調試 1839114.2運行結果 199585五.總結 21引言1.1項目背景當今社會的生活節(jié)奏越來越快,人們對手機的要求也越來越高,由于手機市場發(fā)展迅速,使得手機操作系統(tǒng)也出現(xiàn)了不同各類,現(xiàn)在的市場上主要有三個手機操作系統(tǒng),symbian,Windowsmobile,以及谷歌的Android操作系統(tǒng),其中占有開放源代碼優(yōu)勢的Android系統(tǒng)有最大的發(fā)展前景。那么能否在手機上擁有自己編寫的個性音樂播放器呢?答案是:肯定的,谷歌Android系統(tǒng)就能做到。本文的音樂播放器就是基于谷歌Android手機平臺的播放器。隨著計算機的廣泛運用,手機市場的迅速發(fā)展,各種音頻視頻資源也在網上廣為流傳,這些資源看似平常,但已經漸漸成為人們生活中必不可少的一部分了。于是各種手機播放器也緊跟著發(fā)展起來,但是很多播放器一味追求外觀花哨,功能龐大,對用戶的手機造成了很多資源浪費,比如CPU,內存等的占用率過高,在用戶需要多任務操作時,受到了不小的影響,帶來了許多不便,而對于大多數普通用戶,許多功能用不上,形同虛設。針對以上各種弊端,選擇了開發(fā)多語種的音頻視頻播放器,將各種性能優(yōu)化,繼承播放器的常用功能,滿足一般用戶(如聽歌,看電影)的需求,除了能播放常見格式的語音視頻文件,高級功能:還能播放RMVB格式的視頻文件。此外,還能支持中文、英文等語言界面。1.2項目研究的目的1.熟悉一下eclipse工具和安卓的環(huán)境配置及開發(fā)的過程;2.熟練掌握java的組件如button,textview,listView,menu等組件的靈活應用;3.熟練掌握安卓的一個關于數據保存的方式SQLite3;4.鍛煉一下自己遇到問題,然后解決問題的能力。1.3安卓簡介1.3.1Android特征1.提供訪問硬件的API函數,簡化像攝像頭、GPS等硬件的訪問過程具有自己的運行時和虛擬機2.提供豐富的界面控件供使用者之間調用,加快用戶界面的開發(fā)速度,保證Android平臺上程序界面的一致性3.提供輕量級的進程間通訊機制Intent,使跨進程組件通信和發(fā)送系統(tǒng)級廣播成為可能4.提供了Service作為無用戶界面,長時間后臺運行的組件支持高效、快速的數據存儲方式1.3.2Android應用程序框架提供Android平臺基本的管理功能和組件重用機制:ActivityManager,管理應用程序的生命周期WindowsManager,啟動應用程序的窗體ContentProvider,共享私有數據,實現(xiàn)跨進程的數據訪問PackageManager,管理安裝在Android系統(tǒng)內的應用程序TeleghonyManager,管理與撥打和接聽電話的相關功能功能分析2.1功能需求分析根據項目的目標,我們可獲得項目系統(tǒng)的基本需求,以下從不同角度來描述系統(tǒng)的需求,并且使用用例圖來描述,系統(tǒng)的功能需求,我們分成四部分來概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器擴展卡需求。下面圖2-1是音樂播放器的基本用例圖,描述了程序的基本功能2.2系統(tǒng)性能需求根據Android手機系統(tǒng)要求無響應時間為5秒,所以就有如下性能要求:當要求歌曲播放時,程序響應時間最長不能超過5秒當要求歌曲暫停時,程序響應時間最長不能超過5秒當要求歌曲停止時,程序響應時間最長不能超過5秒當要求歌曲上/下一首時,程序響應時間最長不能超過5秒(5)當要求進行清單列表時,程序響應時間最長不能超過5秒2.3運行環(huán)境需求操作系統(tǒng):Android手機基于Linux操作系統(tǒng)支持環(huán)境:Android1.5-4.2.2版本開發(fā)環(huán)境:Eclipse3.5ADT21TOC\o"1-3"\h\u程序詳細設計3.1主界面的設計主界面包含本地列表獲取、我的收藏、在線音樂及正在播放等各個功能的切換。首先為我們出現(xiàn)的是音樂列表的獲取。Android系統(tǒng)提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套數據庫表格,通過ContentProvider的方式提供給用戶。當手機開機或者有SD卡插拔等事件發(fā)生時,系統(tǒng)將會自動掃描SD卡和手機內存上的媒體文件,如audio,video,圖片等,將相應的信息放到定義好的數據庫表格中。在這個程序中,我們不需要關心如何去掃描手機中的文件,只要了解如何查詢和使用這些信息就可以了。MediaStore中定義了一系列的數據表格,通過ContentResolver提供的查詢接口,我們可以得到各種需要的信息;其主要方法如下:創(chuàng)建ArrayList<>存儲音樂列表;用Cursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder);來獲取手機上的音樂;用MediaStore.Audio.Media.XXX(XXX可以是ALBUM,SIZE,DURATION等信息)來獲取音樂相關信息;生成音樂列表。關鍵代碼:publicclassMusicList{ publicstaticArrayList<Music>getMusicData(Contextcontext){ ArrayList<Music>musicList=newArrayList<Music>(); ContentResolvercr=context.getContentResolver(); if(cr!=null){ //獲取所有歌曲 Cursorcursor=cr.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER); if(null==cursor){ returnnull; } if(cursor.moveToFirst()){ do{ Musicm=newMusic(); Stringtitle=cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.TITLE)); Stringsinger=cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ARTIST)); if("<unknown>".equals(singer)){ singer="未知藝術家"; } Stringalbum=cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ALBUM)); longsize=cursor.getLong(cursor .getColumnIndex(MediaStore.Audio.Media.SIZE)); longtime=cursor.getLong(cursor .getColumnIndex(MediaStore.Audio.Media.DURATION)); Stringurl=cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.DATA)); Stringname=cursor .getString(cursor .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); Stringsbr=name.substring(name.length()-3, name.length()); if(sbr.equals("mp3")){ m.setTitle(title); m.setSinger(singer); m.setAlbum(album); m.setSize(size); m.setTime(time); m.setUrl(url); m.setName(name); musicList.add(m); } }while(cursor.moveToNext()); } if(cursor!=null){ cursor.close(); } } returnmusicList; }}主界面的模擬器效果圖3.2播放界面設計播放界面是播放器的核心所在,它需要實現(xiàn)播放器的其本功能(播放、暫停、上一曲、下一曲、聲音控制、播放方式等)。首先,我們需要實現(xiàn)其播放/暫停功能。privatevoidplay(){if(mp!=null){mp.start();}flag=1;}//播放歌曲privatevoidpause(){if(mp!=null){mp.pause();}flag=1;}//暫停歌曲上/下一曲功能的實現(xiàn):privatevoidlastOne(){ShowNotifcation();if(_ids.length==1){position=position;}elseif(position==0){position=_ids.length-1;}elseif(position>0){position--;}//上一曲privatevoidnextOne(){ShowNotifcation();if(_ids.length==1||PlayMusicActivity.loop_flag==PlayMusicActivity.LOOP_ONE){position=position;}elseif(PlayMusicActivity.loop_flag==PlayMusicActivity.LOOP_ALL){if(PlayMusicActivity.random_flag==true){//獲得隨機位置inti=getRandomPostion(true);if(i==-1){stop();return;}else{position=i;}}else{if(position==_ids.length-1){position=0;}elseif(position<_ids.length-1){position++;}}}elseif(PlayMusicActivity.loop_flag==PlayMusicActivity.LOOP_NONE){if(PlayMusicActivity.random_flag==true){//inti=getRandomPostion(false);if(i==-1){stop();return;}else{position=i;}}else{if(position==_ids.length-1){stop();return;}elseif(position<_ids.length-1){position++;}}}//下一首接著就是聲音的控制,聲音的控制是通過一根進度條來實現(xiàn),其主要代碼如下:privateOnSeekBarChangeListenerseekBarChangeListener=newOnSeekBarChangeListener(){@OverridepublicvoidonProgressChanged(SeekBarseekBar,intprogress,booleanfromUser){if(seekBar.getId()==R.id.sb_player_voice){//設置音量am.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);}}@OverridepublicvoidonStartTrackingTouch(SeekBararg0){}@OverridepublicvoidonStopTrackingTouch(SeekBararg0){}最后,要實現(xiàn)播放方式,主要有兩種方式,隨即和順序。3.3其他功能事件監(jiān)聽的部分代碼:privatevoidinitComponent(){ ib_play=(ImageButton)findViewById(R.id.play); ib_pause=(ImageButton)findViewById(R.id.pause); ib_stop=(ImageButton)findViewById(R.id.stop); ib_fileList=(ImageButton)findViewById(R.id.file_list); ib_prev=(ImageButton)findViewById(R.id.prev); ib_next=(ImageButton)findViewById(R.id.next); ib_volumeAdd=(ImageButton)findViewById(R.id.volume_add); ib_volumeSub=(ImageButton)findViewById(R.id.volume_sub); onClickListener=newOnClickListener(); ib_play.setOnClickListener(onClickListener); ib_pause.setOnClickListener(onClickListener); ib_stop.setOnClickListener(onClickListener); ib_fileList.setOnClickListener(onClickListener); ib_prev.setOnClickListener(onClickListener); ib_next.setOnClickListener(onClickListener); ib_volumeAdd.setOnClickListener(onClickListener); ib_volumeSub.setOnClickListener(onClickListener); }界面背景實現(xiàn)://調用背景圖片<?xmlversion="1.0"encoding="utf-8"?><bitmapxmlns:android="/apk/res/android"android:src="@drawable/beijing"></bitmap>//定義圖片大小,位置,調用圖片<ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:contentDescription="@string/hello_world"android:src="@drawable/ic_launcher1"/>獲取皮膚Id **/ publicintgetCurrentSkinId(){ intskinIndex=settingPreference.getInt(KEY_SKINID,0); if(skinIndex>=SKIN_RESOURCES.length){ skinIndex=0; } returnskinIndex; } /** *設置皮膚資源ID **/ publicvoidsetCurrentSkinResId(intskinIndex){ Editorit=settingPreference.edit(); it.putInt(KEY_SKINID,skinIndex); mit(); }設置正常模式和夜間模式 **/ publicvoidsetBrightness(Viewv){Settingsetting=newSetting(this,true); Stringbrightness=setting.getValue(Setting.KEY_BRIGHTNESS); MenuAdapter.ViewHolderviewHolder=(MenuAdapter.ViewHolder)v.getTag(); WindowManager.LayoutParamsattributes=getWindow().getAttributes(); if(brightness!=null&&brightness.equals("0")){//夜間模式 viewHolder.tv_title.setText(getResources().getString(R.string.darkness_title)); viewHolder.btn_menu.setBackgroundResource(R.drawable.btn_menu_darkness); attributes.screenBrightness=brightnesslevel; setting.setValue(Setting.KEY_BRIGHTNESS,"1"); getWindow().setAttributes(attributes); }else{//正常模式 viewHolder.tv_title.setText(getReso
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 球囊擴張支架在卒中治療中的應用
- 深度解析(2026)《GBT 19323-2003涂附磨具 帶除塵孔砂盤》
- 鄉(xiāng)村振興部-鄉(xiāng)村振興專員面試題及答案
- 物流管理助理面試題及應對策略
- 教育行業(yè)教師招聘技能考核題目
- 安全檢查設備建設項目可行性分析報告(總投資17000萬元)
- 銷售代表業(yè)績考核與評價標準
- 深度解析(2026)《GBT 18991-2003冷熱水系統(tǒng)用熱塑性塑料管材和管件》(2026年)深度解析
- 壓力表項目可行性分析報告范文(總投資17000萬元)
- 感光探測器項目可行性分析報告范文(總投資10000萬元)
- 電力行業(yè)電力工程設計師崗位招聘考試試卷及答案
- 2025年北京市建筑施工作業(yè)人員安全生產知識教育培訓考核試卷E卷及答案
- 2025急性高甘油三酯血癥胰腺炎康復期多學科管理共識解讀
- 2025年事業(yè)單位面試熱點題目及答案解析
- 湖北省宜昌市秭歸縣2026屆物理八年級第一學期期末學業(yè)水平測試模擬試題含解析
- 采用煙氣擋板法再熱汽溫控制系統(tǒng)的研究
- 工程竣工預驗收會議紀要模板
- 2025秋期版國開電大本科《理工英語4》一平臺綜合測試形考任務在線形考試題及答案
- 安全生產法(2025年修訂版)
- 乒乓球培訓合同7篇
- 旅游包車安全知識培訓課件
評論
0/150
提交評論