远程服务场景:应用需要调用其他应用服务中的方法,或调用底层服务中的方法。
aidl:
package com.example.aidl2;
interface IAidlBinder {
boolean isUidExist(int uid);
}远程服务:
public class AidlService extends Service {
@Override
public IBinder onBind(Intent intent) {
return new AidlBinder();
}
public class AidlBinder extends IAidlBinder.Stub {
@Override
public boolean isUidExist(int uid) {
return isUidSaved(uid);
}
}
private boolean isUidSaved(int uid) {
boolean result = false;
String str = "1000|10012|10013|10087";
if (str.contains(String.valueOf(uid))) {
result = true;
}
return result;
}
}注册服务:
<service android:name="com.example.aidl2.AidlService">
<intent-filter >
<action android:name="com.example.aidl2.AidlService"/>
</intent-filter>
</service>其他应用调用:
public class MainActivity extends Activity {
private IAidlBinder mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindAidl();
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mService != null) {
try {
boolean uidExist = mService.isUidExist(10012);
System.out.println("uid是否存在" + uidExist);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unBindAidl();
}
private void bindAidl() {
Intent service = new Intent();
service.setAction("com.example.aidl2.AidlService");
bindService(service, mConn, Context.BIND_AUTO_CREATE);
}
private void unBindAidl() {
if (mConn != null) {
unbindService(mConn);
}
mService = null;
}
ServiceConnection mConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IAidlBinder.Stub.asInterface(service);
}
};
}调用者要想调用服务里面的方法,必须要保证aidl文件同远程服务里面的一样(包名也要和远程服务中aidl所在的包名相同)。
AIDL远程服务示例

被折叠的 条评论
为什么被折叠?



