- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AIDL服务创建步骤
Android应用程序中AIDL服务端与客户端的搭建
AIDL简介
AIDL:Android Interface Definition Language,即Android接口描述语言。
为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。我们知道4个Android应用程序组件中的3个(Activity、Broadcast和Content Provider)都可以进行跨进程访问,另外一个Android应用程序组件Service同样可以。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。
AIDL服务端创建步骤
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。
Aidl文件中首先要定义aidl文件所在包的包名,如下所示:
package com.ccit.se.aidl;
接着定义接口,接口要在interface 文件名{}之中定义,如下所示:
interface ISEService{}
定义接口的时候与java的接口类似,不过参数要指明是in,out或者inout参数,如下所示:
String unSymEDcrypt(in int type,in int atype,in String input);
上述代码中,Stirng代表此接口的返回值类型,unSymEDcrypt是接口的方法名,in int type 是接口的输入参数,如果是out,则标明此参数在调用外声明,在实现中赋值,inout则表示实现内可以使用此参数也可以对此参数进行赋值。
可以在接口声明中添加方法注释,注释规则与java相同,注释过后会在自动生成的文件中自动生成注释,方便调用。
(2)如果aidl文件的内容是正确的,ADT会自动在gen目录下生成一个相对应的Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
服务类要继承Service类,实现父类的onBind方法,否则服务将无法被访问。
在该类中声明一个刚刚ADT自动生成的类的对象,如下所示
private ISEService.Stub binder = new Stub(){}
在该类中实现接口中定义的方法,如下所示:
private ISEService.Stub binder = new Stub(){
public String unSymEDcrypt(int type, int atype, String input)
throws RemoteException {
return fads;
}
}
在onBind方法中return该对象,如下所示:
public IBinder onBind(Intent intent) {
return binder;
}
在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,action标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值,如下所示:
application
android:icon=@drawable/ic_launcher
android:label=@string/app_name
service
android:name=SEService
android:process=:remote
intent-filter
action android:name=com.ccit.se.aidl.ISEService /
/intent-filter
/service
/application
到此步,AIDL的服务端已经完工。
下面讲下AIDL客户端
AIDL客户端创建步骤
(1)首先在Android工程中创建一个与AIDL文件中packge定义的包名,将刚刚创建的AIDL文件放入此包中。
此时ADT会自动在gen目录下生成一个java文件。
在需要调用服务的Activity中声明一个刚
文档评论(0)