AIDL实现进程间通信,应用于电话拦截
来源:互联网 发布:mac word ms明朝 编辑:程序博客网 时间:2024/06/05 17:50
3.AIDL Android Interface Definition Language:接口描述语言
-----------------------------------------------
跨进程调用Service实例
步骤:
1.在客户端创建接口,比如名字叫 IPlayController
安卓系统会自动生成类 Stub extends Binder implements IPlayController。
类型转换的方法 IPlayController asInterface (IBinder obj)
2.在客户端编写MyService类
MyService的内部类MyBinder继承自Stub类。
其中特别需要注意的是:onBind方法需要返回MyBinder实例。
3.在服务端,同样将接口拷贝过来,IPlayController
4.在服务端的Activity中绑定MyService,并创建获取ServiceConnection的实例,当绑定成功的时候
会回调其onServiceConnection,将传入的参数IBinder实例转换为IPlayController实例。就可以远程调用service的服务方法了
如:
private IPlayController icontroller;
ServiceConnection conn=new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {}@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {//获取到controller对象icontroller=IPlayController.Stub.asInterface(binder);}};bindService(intent, conn, BIND_AUTO_CREATE);protected void onDestroy() {super.onDestroy();unbindService(conn);}
4.AIDL应用:电话,ITelephony
接口:ITelephony.aidl
基本逻辑:参考6.ServiceManager
监听电话应用-拦截电话:
1.拷贝iTelephony.aidl接口
2.获得ITelephony:TelePhonyManager类中有一个私有方法。private ITelephony getITelephony() {
return ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
},利用java 的反射机制
如果能或取到ServiceManager类,可以使用正常做法。但是Android的设计将ServiceManager隐藏了,所以只能使用反射机制。
正常做法:
IBinder binder=ServiceManager.getService(TELEPHONY_SERVICE);
ITelephony tel=ITelephony.Stub.asInterface(binder);
tel.endCall();
反射代码:
//获得ServiceManager的类对象,然后获得其方法对象
Method method=Class.forName("android.os.ServiceManager").getDeclaredMethod("getService", String.class);
IBinder binder=(IBinder)method.invoke(null, TELEPHONY_SERVICE)//对于静态方法,第一个参数可以被忽略,即可以将它设置为null
ITelephony tel=ITelephony.Stub.asInterface(binder);//IBinder类型转换为ITelephony类型实例
tel.endCall();
详细介绍参考:http://book.51cto.com/art/201109/291234.htm
- AIDL实现进程间通信,应用于电话拦截
- AIDL实现进程间通信
- AIDL实现进程间通信
- AIDL实现进程间通信
- AIDL实现进程间通信
- Android:广播+AIDL实现电话拦截
- 使用AIDL实现进程间的通信
- android 使用AIDL实现进程间通信
- 使用AIDL实现进程间的通信
- Android Aidl实现进程间通信
- Android使用AIDL实现进程间通信
- Android使用AIDL实现进程间通信
- android笔记 AIDL 实现进程间通信
- Android使用AIDL实现进程间通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- C语言的指针
- Android之联系人PinnedHeaderListView使用
- TopCoder 350 points 22-SRM 154 DIV 2 246.20/300 82.07%
- UVA10112
- 我的学习生涯(Delphi篇) - 23
- AIDL实现进程间通信,应用于电话拦截
- 给MyEclipse设置工作空间
- hibernate jpa 注解 @Temporal(TemporalType.DATE) 格式化时间日期,页面直接得到格式化类型的值
- mac下cocos2d-x开发方法--Xcode和eclipse的代码共用
- C 第十一次作业
- 生产者与消费者
- TCP/IP 之 Java Socket编程 Keep-Alive
- 第11次实验任务
- 限制linux用户登陆数量limits.conf配置说明