AndroidStudio中创建AIDL Service(跨应用调用服务)
来源:互联网 发布:2017宏观经济数据 编辑:程序博客网 时间:2024/05/19 04:52
用startService,bindService创建的服务只能在本应用程序内访问,如果要使得本程序的服务能够被其他应用程序访问,这时候就要使用远程过程调用(Remote Procedure Call,RPC)方式来实现,安卓定义了一种接口定义语言Android Interface Definition Language,简称AIDL。今天记录一下如何在Android Studio下创建AIDL Serivce。
建立ADIL Service的步骤比建立普通Service要多一些,主要有:
1、创建AIDL文件,在这里面定义远程接口。
2、生成Java接口文件。
3、建立一个Service的子类,并且记得在AndroidManifest.xml文件中配置。
在客户端调用ADIL Servie:
1、拷贝服务器端的AIDL文件,并生成Java接口文件。
2、用BindService来调用Service,与调用普通Serivce相类似,只是获取IBinder的方式有点不一样。
下面结合例子来看看,编程环境是Android Studio v1.0.1,本例子基于《疯狂Android讲义(第二版)》10.2节的例子。 本AIDL Service只有两个方法,返回一个字符串和double型数据。
一、建立AIDL文件
在项目名称上右键>NEW>AIDL>AIDL File,这样就创建了一个ADIL文件,命名为ICat
文件内容为:
然后菜单中选择Build>Rebulid Project,这样就生成了java接口文件,地址在项目文件夹/app/build/generated/aidl里面。
二、编写Service子类:
这一步跟建立普通的Serivce步骤一样,同样右键>New>Service,这样会创建一个Service的子类以及在AndroidManiFest中添加Service的的内容,主要要添加action标签并且定义android:name。它的onBind方法返回的IBinder对象要是ICat.Stub的子类的实例,ICat.Stub这个类基本不用去管它,是自动生成的。
然后将应用部署到手机上。
三、客户端调用
首先要拷贝AIDL文件,这里要保证文件的内容一模一样,包括包的名称,比如本例子中服务器端AIDL文件所在包的名称是com.sysu.aidlclient.aidlcilent,如何做到这一点,先新建一个项目,然后在:项目文件夹/app/src/main目录下建立一个aidl文件夹,与java文件夹同级,在Android Studio中就可以看到这个目录,在这个目录上右键New>Package,建立一个com.sysu.aidlclient.aidlclient的包,再将aidl文件拷进去。这样才能保证生成的java接口文件完全一样,否则会提示找不到接口。
在MainActivity中调用,用bindService方法,记得要定义一个显式的intent,如红色代码获取Service的IBinder的代理
之后就可以用catService来调用远程service中的方法了
这里用到的AIDL只涉及到一些基本的数据类型,还可以用到一些自定义数据类型,这样步骤会稍微多一些,另开一篇文章记录。
- AndroidStudio中创建AIDL Service(跨应用调用服务)
- AIDL使用详解 (二)AndroidStudio中 创建 AIDL service
- 使用AIDL创建Service(AndroidStudio)
- 跨进程调用Service(AIDL服务)
- 跨进程调用Service(AIDL服务)
- 跨进程调用Service(AIDL 服务)
- AIDL实现跨应用调用服务
- service中AIDL的应用
- android跨进程调用Service(AIDL服务)
- 在AndroidStudio中创建aidl文件
- Android -- 跨应用绑定service(AIDL)
- android基础笔记:服务(Service)跨进程调用Service(AIDL Service)
- AndroidStudio创建AIDL工程
- 跨进程调用 Service(AIDL Service)
- Android Studio中创建AIDL Service
- Android studio 中创建AIDL Service
- 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
- Android Service服务(二)AIDL
- quartz 中JobExecutionContext的使用
- 颜色代码
- 在MFC里面实现线程的实例
- 用java在linux上写一个hello world
- Spring 学习5--使用AOP统一处理日志
- AndroidStudio中创建AIDL Service(跨应用调用服务)
- 01-MySQL-索引的操作
- hisi_ISP调试个人记录笔记
- 售货员的难题(0411)
- 浅谈ES6 class实现React Class
- Spring集合的注入
- RxJava 系列学习
- 数据压缩知识点整理
- Android内核开发:浅析APK的安装过程