Android34_跨进程访问AIDL
2016-01-20 10:19
429 查看
跨进程访问——AIDL服务
一、AIDL:
(一)、概念:
1、相关知识:
在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢?
显然, Java中是不支持跨进程内存共享的。因此要传递对象, 需要把对象解析成操作系统能够理解的数据格式, 以达到跨界对象访问的目的。这就是远程程序调用(Remote
Procedure Call , RPC)。
在JavaEE中,采用RMI通过序列化传递对象。在Android中, RPC解决方案是采用AIDL(Android
Interface Definition Language:接口定义语言)方式实现。
Activity、BroadCast、ContentProvider和Service都可以实现跨进程的访问。
ICP:interprocess communication :内部进程通信
2、什么是AIDL?
AIDL是 Android Interface definition language的缩写,它是一种android内部进程通信接口的描述语言,通过它定义进程间的通信接口,实现进程间通信。AIDL就是Android中的一种实现RPC的解决方案。
(二)、建立AIDL服务的步骤:
1、在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。
2、如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
3、建立一个服务类(Service的子类)。
4、实现由aidl文件生成的Java接口。
5、在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。
二、AIDL实现挂断电话:
(一)、核心代码:
public class InCallReceiver extends BroadcastReceiver { private TelephonyManager manager = null; @Override public void onReceive(Context context, Intent intent) { manager = (TelephonyManager) context .getSystemService(Service.TELEPHONY_SERVICE); switch (manager.getCallState()) { case TelephonyManager.CALL_STATE_RINGING: String incomingNumber = intent.getStringExtra("incoming_number"); if ("12345678".equals(incomingNumber)) { try { // 获得TelephonyManager的class对象 Class<TelephonyManager> telephonyManagerClass = TelephonyManager.class; // 获得TelephonyManager.getITelephony方法的Method对象 Method telephonyMethod = telephonyManagerClass .getDeclaredMethod("getITelephony", (Class[]) null); // 允许访问私有的方法 telephonyMethod.setAccessible(true); // 调用getITelephony()方法返回ITelephony对象 ITelephony telephony = (com.android.internal.telephony.ITelephony) telephonyMethod .invoke(manager, (Object[]) null); // 挂断电话 telephony.endCall(); } catch (Exception e) { Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG) .show(); } } break; } } }
三、AIDL实现网络加载图片:
(一)、服务端:
(二)、客户端:
相关文章推荐
- Android33_Service
- Android32_ExpandableListView、AutoCompleteTextView、ToggleButton
- android数据存储
- 【Android Studio快捷键】之代码提示
- Android31_BroadcastReceiver及Notification
- Android30_TAB书签导航条制作
- Android29_ViewPager
- Android Studio如何添加工程(project)为library(针对非gradle)
- Android28_Fragment及屏幕自适应
- Android27_LruCache缓存处理及异步加载图片类的封装
- 2015年,从毕业到工作的几点感悟(Android开发新人)
- 2015年,从毕业到工作的几点感悟(Android开发新人)
- Android中Java和JavaScript交互
- 阅读《Android 从入门到精通》(14)——时间选择器
- Android26_Bitmap二次采样
- Android25_Handler、Looper消息传递机制
- android应用程序窗口框架学习(4)-从setcontentview说起
- Android 三大图片缓存原理、特性对比
- Android Studio导入第三方jar包
- Android24_ActionBar及Dialog