一.AIDL单向绑定(服务端)
1.创建Service
2.新建一个library
3.新建一个aidl
4.新建完library和aidl接口需要在app中引入
5.创建一个接口提供给外部监听服务是否成功注册
6.新建一个Manager管理类提供方法给外部使用
public class AppManager {
private static final String TAG = "AppManager";
private static AppManager appManager;
private boolean isConnect;
private Context mContext;
//aidl接口
private ISettingStatusListener iSettingStatusListener;
//服务连接接口
private IAppServiceListener mIAppServiceListener;
//单例模式
public static AppManager getInstance() {
if (appManager == null) {
synchronized (AppManager.class) {
if (appManager == null) {
appManager = new AppManager();
}
}
}
return appManager;
}
/**
* ServiceConnect对象
*/
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.i(TAG, "连接成功" + componentName);
isConnect = true;
iSettingStatusListener = ISettingStatusListener.Stub.asInterface(iBinder);
mIAppServiceListener.onServiceConnect();
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
isConnect = false;
Log.i(TAG, "断开连接");
mIAppServiceListener.onServiceDisconnected();
}
};
/**
* 绑定服务
* @param context
* @param appServiceListener
*/
public void registerAppService(Context context , IAppServiceListener appServiceListener){
Log.i(TAG, "registerAppService" );
mIAppServiceListener = appServiceListener;
if (mContext == null){
mContext = context;
}
Intent intent = new Intent();
// intent.setComponent(new ComponentName(Constants.SERVICE_PKG_NAME,Constants.SERVICE_CLS_NAME));
intent.setAction("com.bale.text.action");
intent.setPackage("com.bale.text");
mContext.bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
}
/**
* 设置开关状态
* @param a
*/
public void setDrivingStatus(boolean a){
Log.i(TAG, "setDrivingStatus" + a);
if (isConnect){
if (iSettingStatusListener != null){
try {
iSettingStatusListener.setDrivingStatus(a);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}
/**
* 获取开关状态
* @return
*/
public boolean getDrivingStatus(){
Log.i(TAG, "getDrivingStatus" );
if (isConnect){
if (iSettingStatusListener != null){
try {
return iSettingStatusListener.getDrivingStatus();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
return false;
}
}
7.绑定服务bindService时需要注意以下
一.AIDL单向绑定(客户端)
bt_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AppManager.getInstance().registerAppService(MainActivity.this, new IAppServiceListener() {
@Override
public void onServiceConnect() {
Log.i(TAG,"onServiceConnect");
}
@Override
public void onServiceDisconnected() {
Log.i(TAG,"onServiceDisconnected");
}
});
}
});
bt_set_driving_status.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i(TAG,"setDrivingStatus");
AppManager.getInstance().setDrivingStatus(true);
}
});
bt_get_driving_status.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean drivingStatus = AppManager.getInstance().getDrivingStatus();
Log.i(TAG,"getDrivingStatus" + drivingStatus );
}
});