您的位置:首页 > 大数据 > 人工智能

193_AIDL的使用

2016-06-06 22:11 399 查看

AIDL的使用

打个比方,一个A应用要调用另一个B应用的服务的方法

假设这个服务就跟支付宝的支付功能一样

MyPayService的pay方法

肯定不能直接调用

那么就要通过代理的方式来调用

这时候就用到AIDL

 

AIDL

Android Interface Definition Language

android接口定义语言

就是用来进程间通信

 

 

步骤

 

我们要在支付应用里面写一个AIDL文件

就是一个接口

interface MyPay{

String pay(int money);

}

注意,aidl里面不能有权限修饰符

 

然后系统就用sdk文件夹里的platform-tools里的aidl.exe

自动帮我们生成了一个代理对象

是在gen目录下的

MyPay.java

 

我们打开看一下就发现多了很多很多东西

反正我们也看不懂

 

然后我们看见这个MyPay接口里面

还有一个抽象类

abstract class Stub extends Binder implements MyPay

 

 

 

然后这个aidl文件也拷贝到A应用里面

注意包名也要一样

包名一样,aidl文件一样,所以生成的java文件应该也是一样的

现在A应用和B应用都有一样的字节码文件了

 

 

然后是PayService

public class MyPayService extends Serivce{

public IBinder onBinder(Intent intent){

return new MyPay.Stub(){

public String pay(int money){

return MyPayService.this.pay();

}

};

}

 

private String pay(int money){

return money;

}

}

 

注册一下服务

<service android:name=”com.lichhowger.MyPayService”>

<intent-filter>

<action android:name=”com.mypay.service”/>

</intent-filter>

</service>

 

 

然后我们在A应用绑定服务

参数:

1.intent

2.ServiceConnection

3.flag

 

Intent intent=new Intent();

intent.setAction(“com.mypay.service”);

 

MyPayServiceConnection
4000
connection=new MyPayServiceConnection();

 

bindService(intent,connection,Service.BIND_AUTO_CREATE);

 

//自己来个内部类

class MyPayServiceConnection implements ServiceConnection{

public void onServiceConnected(ComponentName name,IBinder service){

//将远程服务传递过来的对象转换为MyPay对象

MyPay mypay=MyPay.Stub.asInteface(service);

}

public void onServiceDisconnected(ComponentName name){

 

}

}

 

调用方法

 

mypay.pay(“99”);

 

 

总结

 

应用B中:

1.要写一个aidl文件

2.要写一个服务,然后返回IBinder代理对象

 

应用A中:

1.要拿到B的aidl文件,生成java字节码文件

2.bindService绑定服务

3.写一个ServiceConnection把远程服务传递过来的对象转换成MyPay对象

4.调用方法

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: