基础使用请移步 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);
        }
    };

运行结果:

 

 

下一篇:android studio 使用 aidl(三)权限验证