音樂播放器開發(fā)報(bào)告_第1頁
音樂播放器開發(fā)報(bào)告_第2頁
音樂播放器開發(fā)報(bào)告_第3頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、An droid基礎(chǔ)實(shí)訓(xùn)報(bào)告學(xué)號:20152000000姓名:普班級:中興訂單(1)班日期:2016.12.25目錄1、手機(jī)音樂播放器介紹 32、手機(jī)音樂播放器功能介紹33、手機(jī)音樂播放器實(shí)現(xiàn)54、手機(jī)音樂播放器實(shí)現(xiàn)演示效果截圖與介紹 105、 實(shí)訓(xùn)收獲121、手機(jī)音樂播放器介紹音樂播放器是一種用于播放各種音樂文件的多媒體播放軟件。它涵蓋了各種音樂格式的播放工具,比如:MP3播放器,WM播放器,MP4播放等。它們不僅界面美觀,而且操作簡單,帶你進(jìn)入一 個(gè)完美的音樂空間。音樂播放器就是音頻解碼器的可視化操作界面, 其實(shí)質(zhì)是針對各 種音頻編碼格式的解碼器。例如 ape格式調(diào)用的是Mon key&#

2、39;s Audio 解碼器,flac格式調(diào)用的是flac解碼器,mp3調(diào)用的是lame解碼器。大部分音樂播放器都支持多種音樂格式的文件, 這是因?yàn)檫@些播 放器將不同的音頻解碼器打包起來, 并制作統(tǒng)一的播放界面, 從而讓 使用者能夠方便地播放和聆聽各種音樂。正因?yàn)橐魳凡シ牌鲀H僅是將音頻解碼器打包, 而同一種音頻的解 碼方式又是固定的,因此理論上所有播放器的音質(zhì)應(yīng)當(dāng)是完全相同 的,并不存在音質(zhì)最好的音樂播放器。 有些音樂播放器會(huì)在解碼器的 基礎(chǔ)上添加DSPft件,對原始的音樂進(jìn)行轉(zhuǎn)換和扭曲,以迎合人們的 喜好(如加強(qiáng)低音或過濾細(xì)節(jié)) ,美其名曰優(yōu)化音質(zhì)以獲得天籟之音, 實(shí)質(zhì)卻是破壞原本音樂, 雖

3、然能夠使部分音樂更好聽, 卻也導(dǎo)致另一 些音樂音質(zhì)大打折扣。音樂播放器的人性化界面和擴(kuò)展性才是各種音樂播放器的特色 所在。大部分商業(yè)版播放軟件往往將界面打造得非常華麗, 操作也十 分簡便,但卻缺乏擴(kuò)展性, 支持格式較少。開源播放軟件一般能夠較好地進(jìn)行擴(kuò)展,支持較多的音樂格式,但往往界面樸素,難以吸引用 戶。2、手機(jī)音樂播放器功能介紹本項(xiàng)目的目的是開發(fā)一個(gè)可以播放主流的音樂文本格式的播放器。設(shè)計(jì)的主要實(shí)現(xiàn)功能是播放MP3等格式的音樂文件,并且能控制播放,暫停,停止,音量控制,選擇上一 曲,選擇下一曲,歌曲列表文件的管理操作,讀取存儲卡播 放等多種播放控制,界面簡明,操作簡單。軟件系統(tǒng)檢測到錯(cuò)誤行

4、為時(shí),報(bào)告錯(cuò)誤,并提示處理操作。音樂播放器返回上一級3、手機(jī)音樂播放器實(shí)現(xiàn)1. 掃描音樂根據(jù)流程圖可知道音樂播放器第一個(gè)界面就是列表掃描音樂,首先在layout中創(chuàng)建songs.xml并添加ListView 具體代碼如下:vListView an droid:id ="+id/a ndroid:list"an droid:layout_width="fill_pare nt"an droid:layout_height="fill_pare nt"/>當(dāng)手機(jī)中沒有音樂時(shí),讓播放列表顯示無音樂 添加:TextView代碼如下:vT

5、extView android:id="id/android:empty"an droid:layout_width="fill_pare nt"an droid:layout_height ="fill_pare nt"an droid:textSize="20sp"android:text="string/no_songs" />然后在 MusicActivity.java中添加:具體代碼教材195頁添加后需再加一下代碼protectedDialog onCreateDialog(fi

6、nal int id) Dialog dialog = null ;switch (id) case SHOW_PROGRESS_DIALOG/ 一個(gè)擴(kuò)展類添加 app的圖片this ).setlcon().setTitle(dialog =n ewAlertDialog.Builder(R.drawable.alert_dialog_ic onR.stri ng.app_ nam0setMessage(R.stri ng.sca n_media_msg.create。;/app 圖標(biāo)break ;default :break ;return dialog;private Cursor all

7、Songs() if ( cursor != null )return cursorContentResolver resolver = getContentResolver(); / 實(shí)現(xiàn)數(shù)據(jù)的共享EXTERNAL_CONTENT_UF實(shí)現(xiàn)專輯DEFAULT_SORT_OR)D; ER對元信息的處理, 并通過 MediaProvidercursor = resolver.query(MediaStore.Audio.Media. 信息null , null , null , MediaStore.Audio.Media./ 多媒體庫是通過 MediaScanner 去掃描磁盤文件, 保存到

8、MediaStore 中。/return cursor ;/ 掃描音樂標(biāo)志的圖片public boolean onCreateOptionsMenu(Menu menu) menu.add(0, ITEM_SCA,N0, R.string.scan_media).setIcon(R.drawable. music_scan);return super .onCreateOptionsMenu(menu);public boolean onOptionsItemSelected(MenuItem item) switch (item.getItemId() case ITEM_SCA:N/掃描整

9、個(gè)SD卡上的多媒體文件Intent intent = newIntent(Intent.ACTION_MEDIA_MOUN);TED/ Intent intent = new Intent(/ "ent.action.MEDIA_SCANNER_SCAN_FILE");File file = Environment. getExternalStorageDirectory (); intent.setData(Uri. fromFile (file); sendBroadcast(intent);Log.i ( "scan" , &

10、quot; 已經(jīng)進(jìn)行廣播,即將進(jìn)行掃描。" );break ;default :break ;return super .onOptionsItemSelected(item);Overrideprotected void onPause() super .onPause(); unregisterReceiver( receiver );Overrideprotected void onListltemClick(ListView l, View v,int position,long id) super.onListItemClick(l, v, position, id);In

11、tent i = new lntent( this , Play in gActivity.class );i.putExtra( "position" , position);startActivity(i);2. 播放列表音樂播放器的列表每一行包含了歌曲的標(biāo)題、歌曲的作者和歌曲的長度等信息,其中歌曲的長度信息按照mm:ss的格式經(jīng)過了格式化,這與在數(shù)據(jù)庫中存放的毫秒數(shù)是不一樣的。為了實(shí)現(xiàn)這樣的布局,編寫了 /res/layout/songs_list.xml文件。vlmageView android:id="+id/listiconl"an droi

12、d:layout_width="wrap_c onten t"an droid:layout_height="wrap_c onten t"an droid:layout_ce nterVerticalan droid:layout_alig nPare ntLeftan droid:layout_margi nRight="4dip"an droid:scaleType="fitCe nter"="true"="true"/><TextViewan droid:

13、id ="+id/title"an droid:layout_width="270dip"an droid:layout_height="wrap_c on te nt"an droid:i ncludeF on tPadd ing-'false"an droid:backgrou ndan droid:s in gleL inean droid:ellipsizean droid:textSize="n ull"="true"="end"an droid:

14、textColor="20sp"="#FFFFFF"="no rmal"an droid:textStylean droid:textColorHighlight="#FFFF9200"an droid:layout_toRightOf="+id/listico n1"<TextView/>an droid:id="+id/duratio n"an droid:layout_width="wrap_c onten t"an droid:layo

15、ut_height="wrap_c ontent"android:textSize="14sp"android:textColor="#FF565555"android:textStyle="normal"android:textColorHighlight="#FFFF9200"android:background ="null" android:scrollHorizontally="true"android:layout_alignParentRig

16、ht="true"android:layout_alignParentBottom="true"/>3. 音樂播放當(dāng)用戶單擊 MusicActivity 列表中的歌曲后,MusicActivity會(huì)跳轉(zhuǎn) PlayingActivity 界面,并在 Intent 中包含了歌曲在ListView 中的 position 。PlayingActivity從 Intent 中獲得position 后,將 Cursor 定位到歌曲處,從 Cursor 中讀取歌曲在SD卡上的路徑開始播放。在 plaing.xml 中添加四個(gè) button 和 seekbar具

17、體代碼教材 196 頁最后定義四個(gè)按鈕代碼 197頁書中只給了 play 在添加三個(gè)代碼 ,和進(jìn)度條代碼下:private OnSeekBarChangeListener seekListener = new OnSeekBarChangeListener() / 定義進(jìn)度條public void onProgressChanged(SeekBar seekBar, int progress,boolean fromTouch) if (fromTouch) int media = player .getDuration() * progress / 1000;player .seekTo(m

18、edia);public void onStartTrackingTouch(SeekBar seekBar) public void onStopTrackingTouch(SeekBar arg0) ;private void next() if (! cursor .moveToNext() cursor .moveToFirst();play();private void pre() if (! cursor .moveToPrevious() cursor .moveToLast();play();private void pause() if ( player .isPlaying

19、() player .pause();state = PAUS;Eplay .setText(R.string.play );private void start() if ( state = STOP) try player .prepare(); catch (IllegalStateException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); else if ( state = PAUS)E player .start(); state = PLAYING;play .setText(R.stri

20、ng.pause);private void stop() player .stop(); state = STOP; play .setText(R.string.play );Overrideprotected void onPause() super .onPause();if ( player .isPlaying() pause();Overrideprotected void on Destroy。super .onDestroy();handler .removeMessages( UPDATEplayer .release。;state = IDLE;創(chuàng)建一個(gè)字符串String

21、Util StringBuffer 這個(gè)“元素”參數(shù)可 以是布爾量、字符、字符數(shù)組、雙精度數(shù)、浮點(diǎn)數(shù)、整型數(shù)、長整型 數(shù)對象類型的字符串、字符串和Stri ngBuffer類等代碼:public static String timeToString(long duration) if (duration < 0)return "00:00"Str in gBuffer sb =new Stri ngBuffer();long m = duration / (60 * 1000);sb.append(m < 10 ?"0" + m : m);s

22、b.append(":");long s = (duration % (60 * 1000) / 1000;sb.append(s < 10 ?"0" + s : s);retur n sb.toStri ng();背景圖片添加圖片代碼如下:需在rec drawable加入圖片an droid:backgrou nd="drawable/pol"需在rec drawable加入圖片4、手機(jī)音樂播放器實(shí)現(xiàn)演示效果截圖與介紹File Edit iRetattoi Aim Nowie iwra i!rojiKt Wndw Hrip r

23、z * 匕3- *, o o * 晉冷 白 v *B Podagr ExfAnr S '-Zy J Me(fePWyerSdbeflx? Andkad 4U.2* 冷 tmcj s*t rn Ju rio nvciidpUyersdrarc 衛(wèi)詁UHACl他r沖* .« -ngAiitlvi'Ty.j.-a i StriigLMjI.jjwngs_lk' smli it*l* re%z u dra:ib£ 訥?rtjdl3giCM png EErjkf.nns忙腳gA ftBWfrT.pfig icorLpfig 因 Hkmnjp miik _sufl.jpg 血 pal jpg 袒k屁1 dl riiW4bi« bdpl G- drue-idpi = draRAablf-nidii drarb-wndpi i- I 日 yetJ w麥 liit.MnM wi滬血 亡 values,AndrodMdiihHLxml1 IhtLNni_ project proeiliefli.pidrinml2jCTgs,Kmi JL2Mcrty,j*va 丄"Paying矗cthrityjmL StrinjMf

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論