音樂播放器設(shè)計(jì)文檔_第1頁
音樂播放器設(shè)計(jì)文檔_第2頁
音樂播放器設(shè)計(jì)文檔_第3頁
音樂播放器設(shè)計(jì)文檔_第4頁
音樂播放器設(shè)計(jì)文檔_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

生產(chǎn)實(shí)習(xí)報(bào)告題目:音樂播放器學(xué)生姓名:張凡學(xué)號(hào):201220220123班級(jí):1222201專業(yè):數(shù)字媒體技術(shù)指導(dǎo)教師:張金2015年08月08日目錄TOC\o"1-4"\h\u6576一、引言 3241691.1項(xiàng)目背景 3168461.2項(xiàng)目研究的目的 4111071.3安卓簡(jiǎn)介 431246二.功能分析 5224612.1功能需求分析 5147822.2系統(tǒng)性能需求 6146582.3運(yùn)行環(huán)境需求 610126三.程序詳細(xì)設(shè)計(jì) 6249113.1主界面的設(shè)計(jì) 611643.2播放界面設(shè)計(jì) 11199693.3其他功能 1410768四.調(diào)試與運(yùn)行 18140304.1調(diào)試 1839114.2運(yùn)行結(jié)果 199585五.總結(jié) 21引言1.1項(xiàng)目背景當(dāng)今社會(huì)的生活節(jié)奏越來越快,人們對(duì)手機(jī)的要求也越來越高,由于手機(jī)市場(chǎng)發(fā)展迅速,使得手機(jī)操作系統(tǒng)也出現(xiàn)了不同各類,現(xiàn)在的市場(chǎng)上主要有三個(gè)手機(jī)操作系統(tǒng),symbian,Windowsmobile,以及谷歌的Android操作系統(tǒng),其中占有開放源代碼優(yōu)勢(shì)的Android系統(tǒng)有最大的發(fā)展前景。那么能否在手機(jī)上擁有自己編寫的個(gè)性音樂播放器呢?答案是:肯定的,谷歌Android系統(tǒng)就能做到。本文的音樂播放器就是基于谷歌Android手機(jī)平臺(tái)的播放器。隨著計(jì)算機(jī)的廣泛運(yùn)用,手機(jī)市場(chǎng)的迅速發(fā)展,各種音頻視頻資源也在網(wǎng)上廣為流傳,這些資源看似平常,但已經(jīng)漸漸成為人們生活中必不可少的一部分了。于是各種手機(jī)播放器也緊跟著發(fā)展起來,但是很多播放器一味追求外觀花哨,功能龐大,對(duì)用戶的手機(jī)造成了很多資源浪費(fèi),比如CPU,內(nèi)存等的占用率過高,在用戶需要多任務(wù)操作時(shí),受到了不小的影響,帶來了許多不便,而對(duì)于大多數(shù)普通用戶,許多功能用不上,形同虛設(shè)。針對(duì)以上各種弊端,選擇了開發(fā)多語種的音頻視頻播放器,將各種性能優(yōu)化,繼承播放器的常用功能,滿足一般用戶(如聽歌,看電影)的需求,除了能播放常見格式的語音視頻文件,高級(jí)功能:還能播放RMVB格式的視頻文件。此外,還能支持中文、英文等語言界面。1.2項(xiàng)目研究的目的1.熟悉一下eclipse工具和安卓的環(huán)境配置及開發(fā)的過程;2.熟練掌握java的組件如button,textview,listView,menu等組件的靈活應(yīng)用;3.熟練掌握安卓的一個(gè)關(guān)于數(shù)據(jù)保存的方式SQLite3;4.鍛煉一下自己遇到問題,然后解決問題的能力。1.3安卓簡(jiǎn)介1.3.1Android特征1.提供訪問硬件的API函數(shù),簡(jiǎn)化像攝像頭、GPS等硬件的訪問過程具有自己的運(yùn)行時(shí)和虛擬機(jī)2.提供豐富的界面控件供使用者之間調(diào)用,加快用戶界面的開發(fā)速度,保證Android平臺(tái)上程序界面的一致性3.提供輕量級(jí)的進(jìn)程間通訊機(jī)制Intent,使跨進(jìn)程組件通信和發(fā)送系統(tǒng)級(jí)廣播成為可能4.提供了Service作為無用戶界面,長(zhǎng)時(shí)間后臺(tái)運(yùn)行的組件支持高效、快速的數(shù)據(jù)存儲(chǔ)方式1.3.2Android應(yīng)用程序框架提供Android平臺(tái)基本的管理功能和組件重用機(jī)制:ActivityManager,管理應(yīng)用程序的生命周期WindowsManager,啟動(dòng)應(yīng)用程序的窗體ContentProvider,共享私有數(shù)據(jù),實(shí)現(xiàn)跨進(jìn)程的數(shù)據(jù)訪問PackageManager,管理安裝在Android系統(tǒng)內(nèi)的應(yīng)用程序TeleghonyManager,管理與撥打和接聽電話的相關(guān)功能功能分析2.1功能需求分析根據(jù)項(xiàng)目的目標(biāo),我們可獲得項(xiàng)目系統(tǒng)的基本需求,以下從不同角度來描述系統(tǒng)的需求,并且使用用例圖來描述,系統(tǒng)的功能需求,我們分成四部分來概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器擴(kuò)展卡需求。下面圖2-1是音樂播放器的基本用例圖,描述了程序的基本功能2.2系統(tǒng)性能需求根據(jù)Android手機(jī)系統(tǒng)要求無響應(yīng)時(shí)間為5秒,所以就有如下性能要求:當(dāng)要求歌曲播放時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過5秒當(dāng)要求歌曲暫停時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過5秒當(dāng)要求歌曲停止時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過5秒當(dāng)要求歌曲上/下一首時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過5秒(5)當(dāng)要求進(jìn)行清單列表時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過5秒2.3運(yùn)行環(huán)境需求操作系統(tǒng):Android手機(jī)基于Linux操作系統(tǒng)支持環(huán)境:Android1.5-4.2.2版本開發(fā)環(huán)境:Eclipse3.5ADT21TOC\o"1-3"\h\u程序詳細(xì)設(shè)計(jì)3.1主界面的設(shè)計(jì)主界面包含本地列表獲取、我的收藏、在線音樂及正在播放等各個(gè)功能的切換。首先為我們出現(xiàn)的是音樂列表的獲取。Android系統(tǒng)提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套數(shù)據(jù)庫表格,通過ContentProvider的方式提供給用戶。當(dāng)手機(jī)開機(jī)或者有SD卡插拔等事件發(fā)生時(shí),系統(tǒng)將會(huì)自動(dòng)掃描SD卡和手機(jī)內(nèi)存上的媒體文件,如audio,video,圖片等,將相應(yīng)的信息放到定義好的數(shù)據(jù)庫表格中。在這個(gè)程序中,我們不需要關(guān)心如何去掃描手機(jī)中的文件,只要了解如何查詢和使用這些信息就可以了。MediaStore中定義了一系列的數(shù)據(jù)表格,通過ContentResolver提供的查詢接口,我們可以得到各種需要的信息;其主要方法如下:創(chuàng)建ArrayList<>存儲(chǔ)音樂列表;用Cursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder);來獲取手機(jī)上的音樂;用MediaStore.Audio.Media.XXX(XXX可以是ALBUM,SIZE,DURATION等信息)來獲取音樂相關(guān)信息;生成音樂列表。關(guān)鍵代碼: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="未知藝術(shù)家"; } 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播放界面設(shè)計(jì)播放界面是播放器的核心所在,它需要實(shí)現(xiàn)播放器的其本功能(播放、暫停、上一曲、下一曲、聲音控制、播放方式等)。首先,我們需要實(shí)現(xiàn)其播放/暫停功能。privatevoidplay(){if(mp!=null){mp.start();}flag=1;}//播放歌曲privatevoidpause(){if(mp!=null){mp.pause();}flag=1;}//暫停歌曲上/下一曲功能的實(shí)現(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){//獲得隨機(jī)位置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++;}}}//下一首接著就是聲音的控制,聲音的控制是通過一根進(jìn)度條來實(shí)現(xiàn),其主要代碼如下:privateOnSeekBarChangeListenerseekBarChangeListener=newOnSeekBarChangeListener(){@OverridepublicvoidonProgressChanged(SeekBarseekBar,intprogress,booleanfromUser){if(seekBar.getId()==R.id.sb_player_voice){//設(shè)置音量am.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);}}@OverridepublicvoidonStartTrackingTouch(SeekBararg0){}@OverridepublicvoidonStopTrackingTouch(SeekBararg0){}最后,要實(shí)現(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); }界面背景實(shí)現(xiàn)://調(diào)用背景圖片<?xmlversion="1.0"encoding="utf-8"?><bitmapxmlns:android="/apk/res/android"android:src="@drawable/beijing"></bitmap>//定義圖片大小,位置,調(diào)用圖片<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; } /** *設(shè)置皮膚資源ID **/ publicvoidsetCurrentSkinResId(intskinIndex){ Editorit=settingPreference.edit(); it.putInt(KEY_SKINID,skinIndex); mit(); }設(shè)置正常模式和夜間模式 **/ 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論