AIDL实现跨应用调用服务
来源:互联网 发布:淘宝淘金币兑换中心 编辑:程序博客网 时间:2024/06/10 10:51
其作用是跨应用调用服务,也就是调用别人编写的服务或是自己写服务给别人调用
所以至少要2个程序来完成,一个是定义服务,一个是调用服务
AIDL的编写流程:
服务端:
AIDLServiceDemo.java
1.src下面的包中建立file
编写aidl文件,这个文件和写Java接口基本一样,唯一的区别是第一不支持自定义类型,第二不允许任何修饰符
package com.example.aidlservicedemo;
interface MyServiceInterface{
void sayHello();
}
保存后悔会在gen下生成一个相应的Java类--------MyServiceInterface。Java暂时不用管
2.接下来我们正常编写Service类,实现onBind方法
在onBind方法中创建并返回gen包中自动生成的那个java类中的内部类Stub的实现类对象
最后别忘了注册Service,另外通过意图过滤器设定一个别名,以便其他程序访问
以上操作是完成了服务提供方的代码
同样在stc/下的包中建立一个 Myservice.java
package com.example.aidlservicedemo;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;import android.util.Log;public class MyService extends Service{@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn new MyServiceInterface.Stub() {@Overridepublic void sayHello() throws RemoteException {Log.v("TAG", "你好,我是AIDL服务返回的数据,我来自com.example.aidlservicedemo");}};}}
3.注册
<service android:name=".MyService">
<intent-filter>
<action android:name="myService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
接下来我们开始编写服务使用者的功能
AIDLClientDemo.java
正常绑定服务,编写ServiceConnection接口实现类
只不过实现类中onServiceConnected方法的参数IBinder service不能直接转型
而是必须通过之前gen包中生成的Java类的Stub类中的静态方法asInterface来使其IBinder类型转换为gen包中生成的那个Java类类型
1.在MainActivity.java中
布局一个按钮出发
package com.example.aidlclientdemo;import com.example.aidlservicedemo.MyServiceInterface;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {ServiceConnection conn=new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stub}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {try{MyServiceInterface myService=MyServiceInterface.Stub.asInterface(service);myService.sayHello();}catch(Exception e){e.printStackTrace();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);((Button)findViewById(R.id.btn)).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent("myService");bindService(intent, conn, BIND_AUTO_CREATE);}});}}2.将AIDLServiceDemo.java的gen下的包复制到src下,删除其中的两个Java类(BuildConfig.java和R.java)
代码完成
先运行AIDLServiceDemo,保持在后台,然后在运行,否则不会得调用远程服务获得数据
- AIDL实现跨应用调用服务
- AndroidStudio中创建AIDL Service(跨应用调用服务)
- aidl 实现远程服务调用 及 回调
- aidl远程服务调用
- AIDL服务的应用
- android 不同进程间的调用 AIDL 实现通讯服务
- 在Android Studio中实现AIDL远程服务调用
- AIDL实现远程服务
- 采用AIDL调用远程服务
- Android系统应用调用Aidl
- android夸应用调用aidl
- 从应用层通过aidl调用到frameworks中添加的服务的方法
- Android AIDL实现远程服务
- Android 使用【AIDL】调用外部服务
- Android 使用【AIDL】调用外部服务
- Android 使用【AIDL】调用外部服务
- Android 使用【AIDL】调用外部服务
- Android 使用【AIDL】调用外部服务
- Spark源码阅读笔记:Standalone模式集群核心角色代码浅析
- [LeetCode]Gray Code
- 1014. Waiting in Line (30)
- 如何在Windows 8下创建Fedora 21 Live USB
- Ubuntu安装和配置ftp服务器
- AIDL实现跨应用调用服务
- 贪心策略 活动安排 会场安排
- Linux内核(1)——copy_to_user和copy_from_user两个函数的分析
- 2014.11.13第二/三周任务(a)(b)√
- hdu1039Easier Done Than Said?
- vc++ Edit Box 使用方法详解和小实例
- 2014/11/13 坚持就是胜利
- Linux内核(2)——设备驱动实验
- lamp on ubuntu