基础使用请移步 android studio 使用 aidl (一)
首先建立在server端建立两个aidl文件
ITaskCallback.aidl 用于存放要回调client端的方法
// ITaskCallback.aidl package com.txy.umpay.aidl; // Declare any non-default types here with import statements interface ITaskCallback { void actionPerformed(int actionId); }
ITaskBinder.aidl 用于存放供给client端调用的方法
// ITaskBinder.aidl package com.txy.umpay.aidl; // Declare any non-default types here with import statements import com.txy.umpay.aidl.ITaskCallback;//一定要注意导包,不然Make就报错了 interface ITaskBinder { boolean isTaskRunning(); void stopRunningTask(); void registerCallback(ITaskCallback cb); void unregisterCallback(ITaskCallback cb); }
接下来Build-->Make Module app就能生成好相应的java文件了
接下来 看下MAIDLService里面怎么写的,贴一下关键代码:
private final ITaskBinder.Stub mBinder = new ITaskBinder.Stub() { public void stopRunningTask() { } public boolean isTaskRunning() { return false; } public void registerCallback(ITaskCallback cb) { if (cb != null) { mCallbacks.register(cb); try { for (int i = 1; i < 6; i++) { cb.actionPerformed(i); Thread.sleep(5000); } } catch (Exception e) { e.printStackTrace(); } } } public void unregisterCallback(ITaskCallback cb) { if (cb != null) { mCallbacks.unregister(cb); } } }; final RemoteCallbackList<ITaskCallback> mCallbacks = new RemoteCallbackList<ITaskCallback>();
接下来把ITaskCallback.aidl和ITaskBinder.aidl 一起拷贝到客户端,同样Build-->Make Module app就能生成好相应的java文件了
在来看下客户端是怎么调用的:(此处都是关键代码,全的代码都是android studio 使用 aidl (一)这里有)
绑定代码:
//使用意图对象绑定开启服务 Intent intent = new Intent(); //在5.0及以上版本必须要加上这个 intent.setPackage("com.txy.umpay.aidl"); intent.setAction("com.txy.umpay.aidl.MAIDLService"); bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
调用代码这个是在线程里面调用的:
try { if (service != null) { service.registerCallback(mCallback); } } catch (RemoteException e) { e.printStackTrace(); }
mCallback的代码:
private ITaskCallback mCallback = new ITaskCallback.Stub() { public void actionPerformed(int id) { Log.e("123", "calculation" + id); } };
运行结果: