1.新建aidl文件(右键选择新建aidl文件,默认会产生与app包同名的aidl文件夹,)在该文件中定义接口方法,rebuild项目在
app->build->generated->source->aide->debug下会产生与
app->src->main->aidl下同名的aidl文件夹及文件。
2.新建service文件,在service文件中实现aidl文件中的接口(
public class MyService extends Service{
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
}
IMyAidlInterface.Stub binder = new IMyAidlInterface.Stub() {
@Override
public int add(int x, int y) throws RemoteException {
return x+y;
}
};
})
3.在mainfest文件中注册MyService,如果是同model内使用则不需要定义(<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
),如果远程调用则需要指定action。
4.(1)同model使用:
首先 定义aidl接口对象(eg:iMyAidlInterface)。
然后 定义ServiceConnection的对象,实现对应的方法,在
onServiceConnected方法中通过aidl文件的stub方法对iMyAidlInterface进行赋值。
接着通过显式指定intent进行bindservice(bindService(intent,connection, Context.BIND_AUTO_CREATE);
)
后边就可以正常使用这个服务了。
(2)远程调用使用:
首先 需要复制跟原app包下一模一样的文件夹及aidl文件到该model下。
然后 rebuild文件,目的也是为了在debug文件夹下产生对应的文件夹和文件。
接着使用类似model下使用,但intent指定需要用与app下mainfest文件注册时的action相同的string,之后进行bindservice就可使用了。