2015武大-終端第一天下午7service_第1頁
2015武大-終端第一天下午7service_第2頁
2015武大-終端第一天下午7service_第3頁
2015武大-終端第一天下午7service_第4頁
2015武大-終端第一天下午7service_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

移動(dòng)平臺(tái)軟件設(shè)計(jì)7

Service7.1什么是Service7.2Service類型7.3本地服務(wù)示例7.1什么是ServiceService是Android系統(tǒng)四大組件之一,它是一種長生命周期的,沒有可視化界面,運(yùn)行于后臺(tái)的一種服務(wù)程序。比如播放音樂的時(shí)候,有可能想邊聽音樂邊干些其他事情,當(dāng)退出播放音樂的應(yīng)用,如果不用Service,我們就聽不到歌了,所以這時(shí)候得用到Service?!痉祷亍?.2Service類型(1)本地服務(wù):用于應(yīng)用程序內(nèi)部(同一個(gè)apk內(nèi)被調(diào)用)服務(wù)可以調(diào)用startService()啟動(dòng),調(diào)用stopService()結(jié)束。在服務(wù)內(nèi)部可以調(diào)用Service.stopSelf()或Service.stopSelfResult()來自己停止。無論調(diào)用了多少次startService(),都只需調(diào)用一次stopService()來停止。Service類型(2)遠(yuǎn)程服務(wù):用于應(yīng)用程序之間(被另一個(gè)apk調(diào)用)定義服務(wù)接口并把接口暴露出來,以便其他應(yīng)用進(jìn)行操作,比如一個(gè)天氣預(yù)報(bào)服務(wù)??蛻舳私⒌椒?wù)對(duì)象的連接,并通過那個(gè)連接來調(diào)用服務(wù)。通過調(diào)用bindService()方法建立連接并啟動(dòng)服務(wù),調(diào)用unbindService()關(guān)閉連接。多個(gè)客戶端可以綁定至同一個(gè)服務(wù)。如果服務(wù)此時(shí)還沒有加載,bindService()會(huì)先加載它。遠(yuǎn)程服務(wù)提供給可被其他應(yīng)用復(fù)用。Service生命周期【返回】stopService()或stopSelf()7.3本地服務(wù)示例--音樂播放服務(wù)主要步驟:1.準(zhǔn)備工作2.創(chuàng)建MusicService3.主程序4.功能改進(jìn)1.準(zhǔn)備工作在res文件夾下新建raw文件夾將音樂文件import到raw文件夾中備注:res/raw文件夾通常存放資源文件,如音頻、視頻等資源res/raw中的文件會(huì)被映射到R.java文件中,訪問的時(shí)候直接使用資源ID,即R.raw.某個(gè)資源id;【返回】文件名不要出現(xiàn)中文和空格,也不要以全數(shù)字命名2.創(chuàng)建MusicService然后命名為MusicServiceMusicService代碼框架publicclassMusicServiceextendsService{publicMusicService(){}@OverridepublicIBinderonBind(Intentintent){thrownewUnsupportedOperationException("Notyetimplemented");}}MusicService添加代碼publicclassMusicServiceextendsService{

MediaPlayermPlayer;//定義音樂播放器變量@OverridepublicvoidonCreate(){super.onCreate();mPlayer=MediaPlayer.create(getApplicationContext(),R.raw.start);

//創(chuàng)建音樂播放器mPlayer.setLooping(true);//設(shè)置可以重復(fù)播放

}@OverridepublicvoidonStart(Intentintent,intstartId){super.onStart(intent,startId);

mPlayer.start();}@OverridepublicvoidonDestroy(){super.onDestroy();

mPlayer.stop();}@OverridepublicIBinderonBind(Intentintent){thrownewUnsupportedOperationException("Notyetimplemented");}}【返回】onBind保留,不要?jiǎng)h除由startService()觸發(fā)由stopService()或stopSelf()觸發(fā)3.主程序(主要代碼)Buttonbt1=(Button)findViewById(R.id.button1);Buttonbt2=(Button)findViewById(R.id.button2);View.OnClickListeneronclicklistener=newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){

Intentintent=newIntent(MainActivity.this,MusicService.class);switch(v.getId()){caseR.id.button1:

startService(intent);//啟動(dòng)服務(wù) break;caseR.id.button2:

stopService(intent);//停止服務(wù) break;

}}};bt1.setOnClickListener(onclicklistener);bt2.setOnClickListener(onclicklistener);【返回】顯示啟動(dòng)Service4.功能改進(jìn)增加暫停、重播、結(jié)束(停止服務(wù))功能思路:通過在Intent傳遞參數(shù)值給Service假設(shè)參數(shù)值:1--播放2--暫停3--重播0--結(jié)束(服務(wù))-1--退出(結(jié)束服務(wù)和Activity)主界面activity_main.xml(GridLayout布局)<GridLayoutxmlns:android=""android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_gravity="center_horizontal"android:columnCount="6"><Buttonandroid:id="@+id/play"android:layout_column="0"android:layout_gravity="left|top"android:layout_row="0"android:text="播放"/><Buttonandroid:id="@+id/pause"android:layout_column="1"android:layout_gravity="left|top"android:layout_row="0"android:text="暫停"/><Buttonandroid:id="@+id/replay"android:layout_column="2"android:layout_gravity="center_horizontal|top"android:layout_row="0"android:text="重播"/><Button

android:id="@+id/stopservice"android:layout_column="3"android:layout_gravity="left|top"android:layout_row="0"android:text="結(jié)束"/><Button

android:id="@+id/exit"android:layout_column="5"android:layout_gravity="left|top"android:layout_row="0"android:text="退出"/></GridLayout>MusicService主要代碼publicclassMusicServiceextendsService{

//定義音樂播放器變量MediaPlayermPlayer;@OverridepublicvoidonCreate(){super.onCreate();if(mPlayer==null){mPlayer=MediaPlayer.create(getApplicationContext(),R.raw.tick);mPlayer.setLooping(true);}}@OverridepublicvoidonDestroy(){super.onDestroy();if(mPlayer!=null){mPlayer.stop();

mPlayer.release();

}}MusicService代碼@OverridepublicvoidonStart(Intentintent,intstartId){super.onStart(intent,startId);if(intent!=null){

Bundlebundle=intent.getExtras();intop=bundle.getInt("op");switch(op){case1:if(!mPlayer.isPlaying()){

mPlayer.start();

}break;case2:if(mPlayer.isPlaying()){

mPlayer.pause();

}break; case3:if(mPlayer!=null){

mPlayer.stop();try{

mPlayer.prepare();}catch(IOExceptionex){ex.printStackTrace();

}

mPlayer.seekTo(0);mPlayer.start();

}break;case0:

stopSelf();break;}}//endswitch}//endif}//endstart播放暫停重播停止服務(wù)(服務(wù)自己結(jié)束服務(wù))在調(diào)用stop后如果需要再次通過start進(jìn)行播放則需要先調(diào)用prepare函數(shù)(要trycatch)取出BundleMainActivity主要代碼Buttonbt1=(Button)findViewById(R.id.play);Buttonbt2=(Button)findViewById(R.id.pause);Buttonbt3=(Button)findViewById(R.id.replay);Buttonbt4=(Button)findViewById(R.id.stopservice);Buttonbt5=(Button)findViewById(R.id.exit);View.OnClickListeneronclicklistener=newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.play:

op=1;break;caseR.id.pause:op=2;break;caseR.id.replay:

op=3;

break;caseR.id.stopservice:op=0;break;caseR.id.exit:op=-1;

break;

}//后面繼續(xù)假設(shè)參數(shù)值:1--播放2--暫停3--重播0--結(jié)束(服務(wù))-1--退出(結(jié)束服務(wù)和Activity)MainActivity主要代碼

finalIntentintent=newIntent(MainActivity.this,MusicService.class);Bundlebundle=newBundle();if(op!=-1){

bundle.putInt("op",op);intent.putExtras(bundle);

startService(intent);

}else{

//此處添加一個(gè)AlertDialog(見后頁)}}//endonClick};//listenerbt1.setOnClickListener(onclicklistener);bt2.setOnClickListener(onclicklistener);bt3.setOnClickListener(onclicklistener);bt4.setO

溫馨提示

  • 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)論