1、client =>> service
1.1 创建aidl文件:client和service需要在同样的位置,同一文件,复制粘贴到同一位置即可
1.1.1不同项目中如下创建:
client端创建
service端创建
1.1.2同一Android项目可以通过引用同一model
setting.gradle中配置
include ':projectName'
project(':projectName').projectDir = new File(projectPath)
app的gradle中的dependencies配置
implementation project(path: ':projectName')
注意自定义参数新建类以及后续监听类都需要放在同一位置。
1.2 service 实现aidl;
private final IUserService.Stub binder = new IUserService.Stub() {
//重写IUserService中的方法
}
1.3 service 的onBind方法中返回实现的aidl 的binder
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
Log.i("qiqiqi Service", "onBind");
return binder;
}
1.4 client 通过bindService建立连接,bindService返回true即此刻连接已建立,并在客户端的onServiceConnected 中接受返回的iBinder
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("qiqiqi Client Model", "to connect service" + service);
mService = IUserService.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
Intent intent = new Intent();
intent.setComponent(new ComponentName(packgName, packageName.serviceName));
boolean isBind = mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
1.5 最后client通过iBinder 即可从client 对service进行通信
mService.aidl中被实现的方法();
2. 通过监听者模式实现 service ==> client
2.1 首先新建文件NotifyListerner.aidl,并在其中添加需要调用的通知到client的方法
2.2 在aidl文件中添加注册监听的方法
void registerListener(NotifyListerner listener);
2.3 client 端实现NotifyListerner中需要接受通知的方法
private ServiceListener mListener = new ServiceListener ();
mService.registerListener(mListener );
class ServiceListener extends NotifyListerner.Stub {
//回调的方法
}
2.4 service端即可通过listener实现从service到client端的回调。
mListener.回调的方法();