国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android使用AIDL方式實現播放音樂案例

2019-10-22 18:12:51
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android使用AIDL方式實現播放音樂的具體代碼,供大家參考,具體內容如下

思路:

① 新建兩個APP項目或者Module,一個作為服務端,一個作為客戶端,在服務端創建service  

② 在兩個module的main文件中分別新建兩個aidl文件(接口),里邊定義處理音樂的方法

③ 在兩個AIDL文件定義過方法后在任務欄給他們makeproject,編譯成Java文件,才能在service和acvitity中使用
interface.Stub需要實例化,實現遠程方法

④.Service中onbind方法,返回的是:interface.Stub。

sevice需要設置action,不然客戶端service運行時會報空指針異常
先處理服務端:

Mainfest文件中,為intent隱式調用添加action 

 <service   android:name=".MusicService"   android:enabled="true"   android:exported="true">   <intent-filter>   <action android:name="com.work.MusicService"></action> </intent-filter>

MusicService。Java

public class MusicService extends Service {  private MediaPlayer player = null;  public MusicService() {  }  //①實現已經makeproject過的adil接口,重寫里邊自定義定義的三個方法  MusicAidlInterface.Stub stub = new MusicAidlInterface.Stub() {    @Override    public void paly() throws RemoteException {      if (player == null) {        player = MediaPlayer.create(MusicService.this, R.raw.hckz);      }      if (player != null && !player.isPlaying()){        player.start();      }    }    @Override    public void paus() throws RemoteException {      if(player!=null&&player.isPlaying()){        player.pause();      }    }    @Override    public void stop() throws RemoteException {      if(player!=null){        player.stop();      }      try {        player.prepare();//重新準備下次播放      } catch (IOException e) {        e.printStackTrace();      }    }  };  @Override  public IBinder onBind(Intent intent) {    return stub;  }  //② 重寫service銷毀時的方法  @Override  public void onDestroy() {    super.onDestroy();    if(player!=null){      player.stop();      player.release();//釋放資源,防止失去依托溢出,發生異常    }  }

處理客戶端

public class MainActivity extends AppCompatActivity implements View.OnClickListener {  private Button btn_play, btn_pause, btn_stop, btn_stopservice, btn_stopacvitity;   MusicAidlInterface service = null;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    intiView();    connect();  }  private void intiView() {    btn_play = (Button) findViewById(R.id.btn_play);    btn_pause = (Button) findViewById(R.id.btn_pause);    btn_stopservice = (Button) findViewById(R.id.btn_stopservice);    btn_stopacvitity = (Button) findViewById(R.id.btn_exitacvitity);    btn_stop = (Button) findViewById(R.id.btn_stop);    btn_play.setOnClickListener(this);    btn_pause.setOnClickListener(this);    btn_stop.setOnClickListener(this);    btn_stopservice.setOnClickListener(this);    btn_stopacvitity.setOnClickListener(this);  }  @Override  public void onClick(View v) {    try {      switch (v.getId()) {        case R.id.btn_play:          service.paly();          break;        case R.id.btn_pause:          service.paus();          break;        case R.id.btn_stop:          service.stop();          break;        case R.id.btn_stopservice:          if (conn != null) {            unbindService(conn);          }          break;        case R.id.btn_exitacvitity:          finish();          break;      }    } catch (RemoteException e) {      e.printStackTrace();    }  }  //連接service  ServiceConnection conn = new ServiceConnection() {    @Override    public void onServiceConnected(ComponentName name, IBinder iBinder) {      service = MusicAidlInterface.Stub.asInterface(iBinder);    }    @Override    public void onServiceDisconnected(ComponentName name) {      service = null;    }  };  //獲取連接BindService的方法  private void connect() {    //使用intent的隱式調用方法    Intent intent = new Intent("com.work.MusicService");    //設置目標service的包名    intent.setPackage("com.work.musicservice");    bindService(intent, conn, BIND_AUTO_CREATE);  }  //重寫acvitity銷毀時候解除綁定的方法  @Override  protected void onDestroy() {    super.onDestroy();    if (conn != null) {//解除綁定      unbindService(conn);    }  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 布尔津县| 花垣县| 长宁县| 庆云县| 苍南县| 临汾市| 嘉定区| 驻马店市| 曲松县| 峡江县| 英山县| 三亚市| 平远县| 浏阳市| 平安县| 洪雅县| 德兴市| 威宁| 阳西县| 和平区| 东安县| 阳原县| 界首市| 建水县| 赤峰市| 宁乡县| 瑞丽市| 塔河县| 恩平市| 滦南县| 榆林市| 四会市| 大英县| 连山| 沭阳县| 乌兰察布市| 民丰县| 巴楚县| 从化市| 龙井市| 贵南县|