Android之小试AIDL

ps:首先来写这个博客主要也是因为在朋友的项目中要用这个技术,因此再好奇的心理下,我也对此来进行了小小的一个试验纯纯的试验【播放一短音乐的功能】。


因为我对这块的理论知识也是一知半解,所以也就不在这卖弄了,有想补充的同鞋可以自行查阅官网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);
    
    }
    

    };
    }`
    至此这个小小的DEMO也就完成了 ,亲测可用 不过音乐播放会有小小问题没解决,不过大概流程也就是这样的!这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值