"activity和service通信"-三大方法之-使用AIDL(跨程序通信)-AndroidStudio方式
2016-07-05 17:07
459 查看
Android Interface Definition Language
翻译为:安卓-接口定义-语言
所谓的AIDL就是可以实现不同程序间的通信,比如我可以在一个程序的Activiy里,用其它程序里面的服务;
如我在我的程序里调用 另一个程序里的计算服务
1.创建一个新的程序app,右键工程名,新建AIDL(如图),并定义接口里的方法.
2.此时点击AIDL,并且点击菜单栏:Build-> Make Project,或者Rebuild,这样就完成服务端的创建
3.然后写一个服务类继承Service,然后创建接口的“根对象”,并且重写方法(然后就可以操作方法),再把这个对象 通过 onBind返回给Activity即可.
4.完成清单注册,并且设置action(等下Intent是通过action来识别服务)
客户端AIDL:
1.同样在main文件夹下新建aidl包,然后创建和服务端同样的包名,并把.aidl文件复制过来.
(最快是,直接打开explore,然后粘贴)
2.然后也要点击.aidl,然后菜单栏:Build-> MP 或R,这样也完成客户端的AIDL构建
3.定义按钮,新建意图Intent();并设置setAction和setPackage();5.0以上必须加包名
4.在ServiceConnected里用AIDL根.接口 转换service并得到对象,就可使用方法了.
翻译为:安卓-接口定义-语言
所谓的AIDL就是可以实现不同程序间的通信,比如我可以在一个程序的Activiy里,用其它程序里面的服务;
如我在我的程序里调用 另一个程序里的计算服务
步骤如下:
服务端AIDL:1.创建一个新的程序app,右键工程名,新建AIDL(如图),并定义接口里的方法.
package goodjobtome.com.flyandroid; interface ServiceAIDL { int getSumResult(int a,int b); }
2.此时点击AIDL,并且点击菜单栏:Build-> Make Project,或者Rebuild,这样就完成服务端的创建
3.然后写一个服务类继承Service,然后创建接口的“根对象”,并且重写方法(然后就可以操作方法),再把这个对象 通过 onBind返回给Activity即可.
public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { //返回的是"接口根"对象 return mBinder; } //写"接口根"对象,并重写方法,就可以自定义操作了 ServiceAIDL.Stub mBinder = new ServiceAIDL.Stub() { @Override public int getSumResult(int a, int b) throws RemoteException { return a+b+100; } }; }
4.完成清单注册,并且设置action(等下Intent是通过action来识别服务)
<service android:name=".MyService"> <intent-filter> <action android:name="myservice.action"/> </intent-filter> </service>
客户端AIDL:
1.同样在main文件夹下新建aidl包,然后创建和服务端同样的包名,并把.aidl文件复制过来.
(最快是,直接打开explore,然后粘贴)
2.然后也要点击.aidl,然后菜单栏:Build-> MP 或R,这样也完成客户端的AIDL构建
3.定义按钮,新建意图Intent();并设置setAction和setPackage();5.0以上必须加包名
4.在ServiceConnected里用AIDL根.接口 转换service并得到对象,就可使用方法了.
public void click(View view) { Intent intent = new Intent(); //action intent.setAction("myservice.action"); //5.0以上版本要设置包 intent.setPackage("goodjobtome.com.flyandroid"); bindService(intent, new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { //获取接口的对象,通过"接口根".接口转换得到的接口根 ServiceAIDL serviceAIDL = ServiceAIDL.Stub.asInterface(service); try { //就可以调用方法. int sumResult = serviceAIDL.getSumResult(5, 9); System.out.println("获取从另一个程序服务端返回的结果: " + sumResult); } catch (RemoteException e) { e.printStackTrace(); } }
重要的事情要说三遍:服务端app必须先开启,然后客户端启动才能实现连接
相关文章推荐
- 深入解读Android的内部进程通信接口AIDL
- Android应用程序四大组件之使用AIDL如何实现跨进程调用Service
- 使用Android studio创建的AIDL编译时找不到自定义类的解决办法
- Android AIDL和远程Service调用示例代码
- Android中如何利用AIDL机制调用远程服务
- Android编程实现AIDL(跨进程通信)的方法详解
- 基于Android AIDL进程间通信接口使用介绍
- Android 使用【AIDL】调用外部服务的解决方法
- Android程序设计之AIDL实例详解
- 实例讲解Android中的AIDL内部进程通信接口使用
- 浅谈Android Aidl 通讯机制
- Android AIDL 原理解析
- Android 使用 AIDL 实现进程间通信,使用基本类型作为输入和输出参数
- AIDL入门
- 绑定服务 aidl 的应用
- android AIDL通信
- [Android] AIDL浅析
- aidl远程服务调用
- android service 和aidl
- Hermes源码分析