AIDL

因为我对这块的理论知识也是一知半解,所以也就不在这卖弄了,有想补充的同鞋可以自行查阅官网API。 
好了 不再多废话了说下步骤吧!

  1. 第一步:创建作为服务端的应用
  2. 第二步:创建.aidl文件(文件支持格式同java基本数据类型一样,文件名同接口名要一样不然会报错),并写接口方法。保存自动在gen目录下生成同名的.java文件,因为我的服务端是在原有的DEMO中写的所以看到其它的类 大家可以略过 
    aidl文件中的内容很简单就两个方法 播放和停止,也没有其它太多的内容这里写图片描述
  3. 第三步:自定义类继承Servicer重写其中的onCreat(),onBind(),onStart()方法;实现音乐的播放停止方法 
    `public class playMusicService extends Service { 
    private MediaPlayer mp;

    @Override 
    public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return bulider; 
    }

    @Override 
    public void onCreate() { 
    // TODO Auto-generated method stub 
    mp = new MediaPlayer(); 
    mp = MediaPlayer.create(playMusicService.this, R.raw.s001); 
    super.onCreate(); 
    }

    @Override 
    public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub

    // 当播放发生错误时的处理事件
    mp.setOnErrorListener(new OnErrorListener() {
    
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            // TODO Auto-generated method stub
            // 释放音乐资源
            mp.release();
            return false;
        }
    });
    super.onStart(intent, startId);
    

    }

    public play.Stub bulider = new play.Stub() {

    @Override
    public void stop() throws RemoteException {
        // TODO Auto-generated method stub
        System.out.println("停止播放");
        stopMusic();
    }
    
    @Override
    public void playing() throws RemoteException {
        // TODO Auto-generated method stub
        System.out.println("开始播放");
        playMusic();
    }
    

    };

    /**

    • 播放音乐的方法 
      */ 
      public void playMusic() { 
      // 开始播放音乐 
      mp.start(); 
      // 音乐播放完毕的处理事件 
      mp.setOnCompletionListener(new OnCompletionListener() {

      @Override
      public void onCompletion(MediaPlayer mp) {
          // TODO Auto-generated method stub
          // 循环播放
          mp.start();
      }
      

      }); 
      if(mp.isPlaying()){ 
      mp.reset(); 
      mp.start(); 

      }

    /**

    • 停止播放的方法 
      */ 
      public void stopMusic() { 
      mp.stop(); 
      mp.release(); 
      }

    @Override 
    public void onDestroy() { 
    // TODO Auto-generated method stub 
    // 服务停止时停止播放音乐并释放资源 
    mp.stop(); 
    mp.release(); 
    super.onDestroy(); 

    }` 
    到这里关于服务端的内容也就搞定了 ,当然别忘了在AndroidManifest.xml中注册service

  4. 第四步:创建客户端应用 内容其实也很简单,复制过来服务端的.aidl文件【路径名要一样】,然后通过ServiceConnection接口接收service返回的IBinder对象,`public class MainActivity extends Activity { 
    private play mPlay;

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Intent intent = new Intent(“com.example.service.playMusicService.aidl”); 
    bindService(intent, connection, BIND_AUTO_CREATE); 
    }

    /**

    • 播放

      • @param v
    • void
    • @throws @author
    • jingxiang
    • @date 2016年12月22日 下午1:54:23 
      */ 
      public void playing(View v) { 
      try { 
      mPlay.playing(); 
      } catch (RemoteException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 

      }

    /**

    • 停止

      • @param v
    • void
    • @throws RemoteException
    • @throws @author
    • jingxiang
    • @date 2016年12月22日 下午1:54:46 
      */ 
      public void stop(View v) throws RemoteException { 
      mPlay.stop(); 
      }

    ServiceConnection connection = new ServiceConnection() {

    @Override
    public void onServiceDisconnected(ComponentName name) {
        // TODO Auto-generated method stub
        mPlay = null;
    }
    
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        // TODO Auto-generated method stub
        mPlay = play.Stub.asInterface(service);
    
    }
    

    }; 
    }` 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值