中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-13 14:02:09 來源:腳本之家 閱讀:180 作者:楊天福 欄目:移動開發

本文實例為大家分享了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);
    }
  }

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

奈曼旗| 新民市| 中方县| 甘孜| 乌拉特前旗| 扎赉特旗| 新安县| 庆云县| 柳江县| 阳山县| 乐亭县| 阳谷县| 唐山市| 沂源县| 尼勒克县| 上虞市| 县级市| 农安县| 东乡| 原平市| 仙居县| 南澳县| 台南县| 乌苏市| 华坪县| 弥勒县| 遂宁市| 新化县| 营口市| 赤水市| 平邑县| 徐水县| 芦山县| 龙泉市| 屯门区| 鹤峰县| 锡林浩特市| 墨竹工卡县| 萍乡市| 卓尼县| 林西县|