四大天王之綁定服務---音樂播放器

大家晚上好,今天給大家帶來的是四大組件之一服務,上次介紹了全局服務,這次是另外一種十分重要的服務,也就是綁定服務,在很多服務操作中都可以用到。綁定服務是可以通過一些方式來控制服務的開始與結束,和一些方法綁定在一起,實現更加有效的操作,相比於全局服務的,綁定的服務更具體點,區域性高。接下來,我以綁定服務做一個音樂播放器demo來闡述四大組件服務的作用。

步驟一:新建BindMusicService.java繼承Service。

public class BindMusicService extends Service {

//定義音頻播放
 private MediaPlayer play;

 // 與創建的MyBind相連接
 public IBinder onBind(Intent intent) {

//
  return new MyBind();
 }

 @Override
 public void onCreate() {
  // 找到mp3音頻
  play = new MediaPlayer();

//獲取指定的音頻文件
  play = MediaPlayer.create(this, R.raw.aa);

  super.onCreate();
 }

//銷燬,音樂停止
 public void onDestroy() {
  if (play.isPlaying()) {
   play.stop();
  }
  super.onDestroy();
 }

 /**
  * 創建MyBind繼承Binder,綁定方法
  */
 public class MyBind extends Binder {

  // 播放音樂
  public void startPlay() {
   if (!play.isPlaying()) {

    play.start();
    // 當從其他的文件夾讀音頻就要play.prepare
    // play.prepare();
   }
  }

  // 暫停音樂
  public void stopPlay() {
   if (play.isPlaying()) {
    play.stop();
   }

  }

 }

}

2.在mainActivity中書寫關鍵代碼

public class BindActivity extends Activity {

  // 定義BindMusicService類的方法,與BindMusicService相連接,MyBind是MusicService的方法
 private MyBind mybind;

 // 構建ServiceConnection
 private ServiceConnection coon = new ServiceConnection() {

  // 當調用者與服務連接不成功,則回調該方法, 當連接出現異常會回調該方法,假如調用者自己實現的解綁操作,則不會回調該方法
  public void onServiceDisconnected(ComponentName arg0) {

  }

  /**
   * 當調用者與服務連接成功,則回調該方法 ComponentName: 調用者的組件名 IBinder: 實現了IBinder接口的對象
   * ,當要綁定的服務成功回調onBind()方法,則表示綁定成功,即onBind的返回值作爲該方法的輸入參數
   * 通過該IBinder參數來獲取服務的實例或者是代理對象

     實現連接功能
   */
  public void onServiceConnected(ComponentName arg0, IBinder ibinder) {
   // 綁定服務
   mybind = (MyBind) ibinder;

  }
 };

 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_bind);
 }

 // 綁定按鈕
 public void bind(View v) {
  //Intent用來綁定兩個組件
  Intent intent = new Intent(this, BindMusicService.class);
  // 執行服務service,參數一:意圖Intent ,參數二:服務連接,參數三:內容的格式

//全局服務是startActivity(intent),而綁定服務是bindService(),
  bindService(intent, coon, Context.BIND_AUTO_CREATE);

 }

 // 解綁按鈕
 public void unBind(View v) {
  // 解綁服務
  unbindService(coon);
 }

 // 播放按鈕
 public void startPlay(View v) {
  if (mybind != null) {

//調用MusicService方法
   mybind.startPlay();
  }

 }

 // 停止按鈕
 public void stopPlay(View v) {
  if (mybind != null) {
   mybind.stopPlay();
  }
 }

}


注意實現:要在AndroidManifest.xml註冊,因爲服務是四大組件之一,四大組件必須要註冊的。

  <service android:name="com.example.demo0823b.service.BindMusicService" />
  

今天就到這裏,儘管不難理解,但這完完全全解刨service的具體流程,通過這個例子相信大家能學到很多。沒有不達不到的目標,只有不努力的你,晚安。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章