版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Android菜鳥做音樂播放器1.1大家好,我們老師經(jīng)常說要自己動手做做小項(xiàng)目,并給這個小項(xiàng)目不斷的增加新的東西,在這個過程中你將會受益匪淺!本人從兩三個月之前就開始學(xué)Android了,但是由于某些原因中途不得不中斷Android的學(xué)習(xí)。現(xiàn)在有時間了而且想往Android這方面發(fā)展,所以想通過這個音樂播放器來鞏固自己的基礎(chǔ)也讓我的水平更上一層樓。也希望與大家多多交流,各位牛人多多指教!這是我這個音樂播放器的第一個版本,只能播放一首歌,有播放、暫停、重復(fù)、取消重復(fù)、停止等基本功能。播放一首歌曲只要用到MediaPlayer這個類就可以輕松的做到了,這個1.1版本主要用到這個類的start()(播放音樂),pause()(暫停音樂),stop()(停止音樂)等方法,具體介紹大家可以查看API,養(yǎng)成查看API的習(xí)慣對我們很有幫助。先創(chuàng)建Android項(xiàng)目MusicPlayerApplicationname:MusicPlayerPackagename :com.android.MusicPlayerCreateActivity:MusicPlayer上代碼:string.xml:viewplaincopytoclipboardprint?<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="hello">MusicPlayer!</string><stringname="app_name">MusicPlayer</string><!--Button--><stringname="button_start">播放</string><stringname="button_stop">停止</string><stringname="button_loop">重復(fù)</string><!--Menu--><stringname="menu_about">關(guān)于</string><stringname="menu_exit">退出</string><stringname="about_message">名稱:音樂播放器\n\n作者:ldj299\n\n郵箱:ldj299@</string><stringname="dialog_yes">確定</string></resources>盡量把要顯示的字符串定義在string.xml中,這樣方便了我們以后對程序的修改main.xml:viewplaincopytoclipboardprint?<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><!--利用兩個LinearLayout布局嵌套,外面的LinearLayout排列方式為垂直,里面的為水平排列使得三個Button水平排列并與TextView垂直排列--><LinearLayoutxmlns:android="/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"><Buttonandroid:id="@+id/button_start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button_start"/><Buttonandroid:id="@+id/button_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button_stop"/><Buttonandroid:id="@+id/button_loop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button_loop"/></LinearLayout></LinearLayout>效果如下:比較簡單的效果,以后會美化的!布局文件完成后接下是在res文件下新建一個raw文件夾并把要播放的音樂復(fù)制到里面去。注意:音樂文件的名稱只能是小寫字母、數(shù)字、下劃線、點(diǎn)。接下來要寫Java文件了:viewplaincopytoclipboardprint?·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150packagecom.android.musicPlayer;importjava.io.IOException;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.content.DialogInterface;importandroid.content.DialogInterface.OnClickListener;importandroid.os.Bundle;importandroid.media.MediaPlayer;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.Button;importandroid.widget.Toast;publicclassMusicPlayerextendsActivity{privateMediaPlayerplayer;privateButtonbutton_start;//音樂開始/暫停按鈕privateButtonbutton_stop;//音樂停止按鈕privateButtonbutton_loop;//音樂重復(fù)/取消重復(fù)按鈕/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);init();findView();setListener();}privatevoidinit(){player=MediaPlayer.create(MusicPlayer.this,R.raw.example);/**MediaPlayer可以由create()這個靜態(tài)方法創(chuàng)建可以有三種不同的參數(shù),×我用的是(Contextcontext,Uriuri)*第一個參數(shù)是我們的這個Activity第二個是放入到raw文件夾中的音樂資源*/}privatevoidfindView(){//為每個button都setId是為了按鈕監(jiān)聽時分辨出具體的buttonbutton_start=(Button)findViewById(R.id.button_start);button_start.setId(0);button_stop=(Button)findViewById(R.id.button_stop);button_stop.setId(1);button_loop=(Button)findViewById(R.id.button_loop);button_loop.setId(2);}privatevoidsetListener(){//給每個按鈕綁定事件button_start.setOnClickListener(buttonListener);button_stop.setOnClickListener(buttonListener);button_loop.setOnClickListener(buttonListener);}privateButton.OnClickListenerbuttonListener=newButton.OnClickListener(){@OverridepublicvoidonClick(Viewv){//根據(jù)之前為每個Button設(shè)置的Id值實(shí)現(xiàn)對應(yīng)的功能switch(v.getId()){case0:player.start();//按鈕顯示文字與播放暫停功能的互換if(button_start.getText()=="暫停"){button_start.setText("播放");player.pause();}else{button_start.setText("暫停");}break;case1:if(button_start.getText()=="暫停"){button_start.setText("播放");player.pause();}player.stop();try{//必須調(diào)用prepare()方法不然停止之后就不能再重新播放player.prepare();}catch(IllegalStateExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}break;case2:player.setLooping(true);//按鈕顯示文字與功能的互換if(button_loop.getText()=="取消重復(fù)"){button_loop.setText("重復(fù)");player.setLooping(false);}else{button_loop.setText("取消重復(fù)");}if(player.isLooping()==true){Toast.makeText(MusicPlayer.this,"重復(fù)已開啟",Toast.LENGTH_SHORT).show();}else{Toast.makeText(MusicPlayer.this,"重復(fù)已關(guān)閉",Toast.LENGTH_SHORT).show();}break;}}};//按下Menu鍵時會執(zhí)行這個方法publicbooleanonCreateOptionsMenu(Menumenu){//增加兩個選項(xiàng)menu.add(0,0,0,R.string.menu_about);menu.add(0,1,0,R.string.menu_exit);returnsuper.onCreateOptionsMenu(menu);}//選擇Menu中的選項(xiàng)是會執(zhí)行這個方法publicbooleanonOptionsItemSelected(MenuItemitem){super.onOptionsItemSelected(item);switch(item.getItemId()){case0://創(chuàng)建新的DialognewAlertDialog.Builder(MusicPlayer.this).setTitle(R.string.menu_about).setMessage(R.string.about_message).setPositiveButton(R.string.dialog_yes,newOnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){//TODOAuto-generatedmethodstub//不做任何處理}}).show();//要記得這個show方法不然就顯示不出來的break;case1:finish();break;}returntrue;}}這是按下Menu鍵的效果:總結(jié):各種講解都在程序中的注釋中喲,整個程序?qū)懴聛磉€是比較順利,對MediaPlayer這個類也不是很熟悉,通過看API還是了解了一些基本用法,但是也遇到了一些問題,像是按下停止之后,再按播放時就不能播放音樂,最后還是在API中有個對MediaPlayer的各個狀態(tài)的描述圖中知道了從stop狀態(tài)是不能直接到start狀態(tài)的,必須先從stop狀態(tài)到prepare狀態(tài)再到start狀態(tài)。咱不怕遇到問題,因?yàn)橹挥薪鉀Q了問題、總結(jié)了經(jīng)驗(yàn)我才能菜鳥蛻變?yōu)榕H说?。呵呵,下一版本是用Service來實(shí)現(xiàn)后臺播放的,我馬上就會學(xué)Service,希望大家支持。希望大家多多交流指導(dǎo)我郵箱是:ldj299@。我們下回再見。Android菜鳥做音樂播放器1.2收藏大家好,音樂播放器的1.1版本已經(jīng)完成了,基本的功能還是有的,但是有個問題因?yàn)槭窃贏ctivity中實(shí)現(xiàn)音樂播放,所以退出之后音樂就不能播放啦,而我們需要它在后臺也能播放怎么辦呢,那就要用到Service這個類啦!上一個版本的xml文件不要改動,只要改動Java文件和新增一個類,不多說上代碼:MusicPlayer.java:viewplaincopytoclipboardprint?01.packagecom.android.musicPlayer;02.importjava.io.IOException;03.importandroid.app.Activity;04.importandroid.app.AlertDialog;05.importandroid.app.Service;06.importandroid.content.DialogInterface;07.importandroid.content.Intent;08.importandroid.content.DialogInterface.OnClickListener;09.importandroid.os.Bundle;10.importandroid.os.IBinder;11.importandroid.media.MediaPlayer;12.importandroid.view.Menu;13.importandroid.view.MenuItem;14.importandroid.view.View;15.importandroid.widget.Button;16.importandroid.widget.Toast;17.publicclassMusicPlayerextendsActivity{18.19.privateButtonbutton_start;//音樂開始/暫停按鈕20.privateButtonbutton_stop;//音樂停止按鈕21.privateButtonbutton_loop;//音樂重復(fù)/取消重復(fù)按鈕22.23./**Calledwhentheactivityisfirstcreated.*/24.@Override25.publicvoidonCreate(BundlesavedInstanceState){26.super.onCreate(savedInstanceState);27.setContentView(R.layout.main);28.29.findView();30.31.setListener();32.}33.privatevoidfindView(){34.//為每個button都setId是為了按鈕監(jiān)聽時分辨出具體的button35.button_start=(Button)findViewById(R.id.button_start);36.button_start.setId(0);37.button_stop=(Button)findViewById(R.id.button_stop);38.button_stop.setId(1);39.button_loop=(Button)findViewById(R.id.button_loop);40.button_loop.setId(2);41.}42.43.privatevoidsetListener(){44.//給每個按鈕綁定事件45.button_start.setOnClickListener(buttonListener);46.button_stop.setOnClickListener(buttonListener);47.button_loop.setOnClickListener(buttonListener);48.}49.50.privateButton.OnClickListenerbuttonListener=newButton.OnClickListener(){51.@Override52.publicvoidonClick(Viewv){53.//根據(jù)之前為每個Button設(shè)置的Id值實(shí)現(xiàn)對應(yīng)的功能54.switch(v.getId()){55.case0:56.//啟動Service;57.Intentintent_start=newIntent(MusicService.PLAY_ACTION);58.intent_start.setClass(MusicPlayer.this,MusicService.class);59.startService(intent_start);60.//按鈕顯示文字與播放與暫停功能的互換61.if(button_start.getText()=="暫停"){62.button_start.setText("播放");63.Intentintent_pause=newIntent(MusicService.PAUSE_ACTION);64.intent_pause.setClass(MusicPlayer.this,MusicService.class);65.startService(intent_pause);66.}else{67.button_start.setText("暫停");68.}69.break;70.case1:71.if(button_start.getText()=="暫停"){72.button_start.setText("播放");73.//player.pause();74.Intentintent_pause=newIntent(MusicService.PAUSE_ACTION);75.intent_pause.setClass(MusicPlayer.this,MusicService.class);76.startService(intent_pause);77.}78.Intentintent_stop=newIntent(MusicService.STOP_ACTION);79.intent_stop.setClass(MusicPlayer.this,MusicService.class);80.startService(intent_stop);81.break;82.case2:83.84.Intentintent_loop=newIntent(MusicService.LOOP_ACTION);85.intent_loop.setClass(MusicPlayer.this,MusicService.class);86.startService(intent_loop);87.88.//按鈕顯示文字與功能的互換89.if(button_loop.getText()=="取消重復(fù)"){90.button_loop.setText("重復(fù)");91.92.Intentintent_notLoop=newIntent(MusicService.NOTLOOP_ACTION);93.intent_notLoop.setClass(MusicPlayer.this,MusicService.class);94.startService(intent_notLoop);95.Toast.makeText(MusicPlayer.this,"重復(fù)已關(guān)閉",Toast.LENGTH_SHORT).show();96.}else{97.button_loop.setText("取消重復(fù)");98.Toast.makeText(MusicPlayer.this,"重復(fù)已開啟",Toast.LENGTH_SHORT).show();99.}100.break;101.}102.}103.};104.105.//按下Menu鍵時會執(zhí)行這個方法106.publicbooleanonCreateOptionsMenu(Menumenu){107.//增加兩個選項(xiàng)108.menu.add(0,0,0,R.string.menu_about);109.menu.add(0,1,0,R.string.menu_exit);110.returnsuper.onCreateOptionsMenu(menu);111.}112.//選擇Menu中的選項(xiàng)是會執(zhí)行這個方法113.publicbooleanonOptionsItemSelected(MenuItemitem){114.super.onOptionsItemSelected(item);115.switch(item.getItemId()){116.case0:117.//創(chuàng)建新的Dialog118.newAlertDialog.Builder(MusicPlayer.this).setTitle(R.string.menu_about).119.setMessage(R.string.about_message).setPositiveButton(R.string.dialog_yes,newOnClickListener(){120.@Override121.publicvoidonClick(DialogInterfacedialog,intwhich){122.}123.}).show();124.break;125.case1:126.finish();127.break;128.}129.returntrue;130.}131.132.}把MusicPlayer.Java中播放音樂的代碼去掉啦,在MusicService.java這個類中實(shí)現(xiàn)讓音樂能在后臺播放。MusicService.java:viewplaincopytoclipboardprint?01.packagecom.android.musicPlayer;02.importjava.io.IOException;03.importandroid.app.Service;04.importandroid.content.Intent;05.importandroid.media.MediaPlayer;06.importandroid.os.IBinder;07.importandroid.util.Log;08.importandroid.widget.Toast;09.publicclassMusicServiceextendsService{10.11.12.publicstaticfinalStringTAG="MusicService";13.14.publicstaticfinalStringPLAY_ACTION="com.android.musicPlayer.PLAY_ACTION";15.publicstaticfinalStringPAUSE_ACTION="com.android.musicPlayer.PAUSE_ACTION";16.publicstaticfinalStringSTOP_ACTION="com.android.musicPlayer.STOP_ACTION";17.publicstaticfinalStringLOOP_ACTION="com.android.musicPlayer.LOOP_ACTION";18.publicstaticfinalStringNOTLOOP_ACTION="com.android.musicPlayer.NOTLOOP_ACTION";19.20.privateMediaPlayerplayer;21.22.@Override23.publicIBinderonBind(Intentintent){24.//TODOAuto-generatedmethodstub25.returnnull;26.}27.28.publicvoidonCreate(){29.super.onCreate();30.init();31.//多用Log來輸出信息來了解Service的生命周期32.Log.d(TAG,"onCreate__");33.}34.publicvoidonStart(Intentintent,intstartId){35.super.onStart(intent,startId);36.//將得到的Intent中帶的值賦值給字符串a(chǎn)ction用來判斷應(yīng)該實(shí)現(xiàn)什么功能37.Stringaction=intent.getAction();38.if(action.equals(PLAY_ACTION)){39.play();//播放40.}elseif(action.equals(PAUSE_ACTION)){41.pause();//暫停42.}elseif(action.equals(STOP_ACTION)){43.stop();//停止44.}elseif(action.equals(LOOP_ACTION)){45.looping(true);//重復(fù)46.}elseif(ac
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 灌溉水資源的遙感估算與應(yīng)用考核試卷
- 寵物社區(qū)與線上社交平臺考核試卷
- 創(chuàng)業(yè)空間的創(chuàng)業(yè)地圖和發(fā)展規(guī)劃考核試卷
- 《涼山彝族農(nóng)業(yè)文化遺產(chǎn)“四川美姑苦蕎栽培系統(tǒng)”保護(hù)研究》
- 《基于視覺的機(jī)械臂抓取研究》
- 《普惠金融對商業(yè)銀行績效影響研究》
- 水果變質(zhì)賠償標(biāo)準(zhǔn)
- 《智能制造對制造業(yè)企業(yè)分工地位的影響研究》
- 《硼鎵共摻雜硅納米薄膜的激光輔助擴(kuò)散機(jī)理及實(shí)驗(yàn)研究》
- 2024年燈頭項(xiàng)目申請報告
- 2014年中級統(tǒng)計師《統(tǒng)計工作實(shí)務(wù)》真題
- 作業(yè)本印制服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 行政批復(fù)協(xié)議書范本
- 清理雜樹雜草施工方案范本
- 【語文】寧波市小學(xué)四年級上冊期中試卷
- 環(huán)保設(shè)施安全風(fēng)險評估報告
- MOOC創(chuàng)新創(chuàng)業(yè)與管理基礎(chǔ)(東南大學(xué))
- 【基于活動理論的信息技術(shù)課程教學(xué)研究8300字(論文)】
- 年產(chǎn)15萬噸PET的生產(chǎn)工藝設(shè)計-畢業(yè)論文
- 車間生產(chǎn)計劃完成情況統(tǒng)計表
- 品管圈(QCC)降低ICU護(hù)士床頭交接班缺陷率課件
評論
0/150
提交評論