AIDL用法:
Android Studio中2对Project简单实例:
AddClient和AddServer
GetStrClient和GetStrServer
首先写服务端代码
1.在AIDL文件中定义一个我们要提供给第二个APP使用的接口。
interface IMyAidlInterface {
String getName();
}
2.在service里面创建一个内部类,继承你刚才创建的AIDL的名称里的Stub类,并实现接口方法,在onBind返回内部类的实例。
public class IRemoteService extends Service {
//客户端绑定service时会执行
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
private IBinder iBinder = new IImoocAIDL.Stub(){
@Override
public int add(int num1, int num2) throws RemoteException
{
Log.e("TAG","收到了来自客户端的请求" + num1 + "+" + num2 );
return num1 + num2;
}
};
}
注意:要在Androidmenifist.xml文件中写明启动该service的intent信息,需要在客户端绑定该Service
然后写客户端代码
1.将我们的AIDL文件拷贝到第二个项目,然后sycn project一下工程
2.在客户端Activity中绑定服务
public class MainActivity extends AppCompatActivity {
private IMyAidlInterface iMyAidlInterface;
Button button;
private ServiceConnection conn=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
iMyAidlInterface=null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Toast.makeText(MainActivity.this, iMyAidlInterface.getName(), Toast.LENGTH_SHORT).show();
}
catch (RemoteException e) { e.printStackTrace();
}
}
});
bindService();
}
private void bindService() {
Intent intent = new Intent(); //绑定服务端的service
intent.setAction("com.lypeer.aidl"); //新版本(5.0后)必须显式intent启动 绑定服务
intent.setPackage("com.example.chenghao.getstrserver");
bindService(intent,conn, Context.BIND_AUTO_CREATE);
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(conn);
}
}IMyAidlInterface
bindService(intent,conn, Context.BIND_AUTO_CREATE);