1.创建一个类继承于service 配置 文件的时候要设置一个action
public class MyRemoteService extends Service
<service android:name="com.example.aidldemo1.MyRemoteService">
<intent-filter >
<action android:name="myRemoteService"/>
</intent-filter>
</service>
2.在第一个服务里面创建一个aidl文件(将接口的后缀名字改为aidl去掉里面的修饰符)
interface MyServiceDelegate {
void say();
}
3.onBinder方法需要自定义一个继承于MyServiceDelegate.Stub的类因为MyServiceDelegate.Stub既继承于Binder又实现了接口MyServiceDelegate
private class MyBinder extends MyServiceDelegate.Stub{
public void say() {
haha();
}
}
4.将aidl所在文件和包复制到第二个项目中
5.在第二个项目中绑定远程服务
private class MyBinder extends MyServiceDelegate.Stub{
public void say() {
haha();
}
}
6.自定义一个内部类实现ServiceConnection接口
private MyServiceDelegate delegate;
private class MyConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
delegate = MyServiceDelegate.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
一定要注意: 类型的转换必须用以下的方法实现否则会在绑定的时候报类型转换异常
delegate = MyServiceDelegate.Stub.asInterface(service);
7.可以调用第一个项目中的方法了
public void say(View v) {
try {
delegate.say();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}