通过AIDL实现挂断电话功能
2015-06-12 15:10
337 查看
1.通过查看TelephonyManager可以看到很多隐藏的方法,这些隐藏的方法大部分都是通过调用getITelephony得到一个ITelephony对象来实现这些功能的,可以看出TelephonyManager相当于一个包装类,主要功能都是在ITelephony对象中,想要实现挂断电话功能可以通过得到Itelephony实现,分析如下代码:
ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
可以看出Itelephony是通过aidl文件得到的,所以从安卓源码中找到
E:\2.3 source\JB\frameworks\base\telephony\java\com\android\internal\telephony\ITelephony.aidl
文件,并且查看它所在的包,在自己工程的src下创建同样的包,拷入ITelephony.aidl
2.拷入后通过查看ITelephony.aidl 文件源码,发现缺少一个aidl文件,查找NeighboringCellInfo.aidl 以同样方式复制进工程下.
3.调用 ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));发现ServiceManager是一个隐藏类,无法直接使用.那么只能通过反射得到类的getService方法.如:
//通过反射得到隐藏类
Class
实现代码:
ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
可以看出Itelephony是通过aidl文件得到的,所以从安卓源码中找到
E:\2.3 source\JB\frameworks\base\telephony\java\com\android\internal\telephony\ITelephony.aidl
文件,并且查看它所在的包,在自己工程的src下创建同样的包,拷入ITelephony.aidl
2.拷入后通过查看ITelephony.aidl 文件源码,发现缺少一个aidl文件,查找NeighboringCellInfo.aidl 以同样方式复制进工程下.
3.调用 ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));发现ServiceManager是一个隐藏类,无法直接使用.那么只能通过反射得到类的getService方法.如:
//通过反射得到隐藏类
Class
//通过AIDL得到的对象,调用挂断电话的方法 asInterface.endCall();
实现代码:
//通过反射得到隐藏类 Class<?> serviceManager = MyTelephonyListener.class.getClassLoader().loadClass("android.os.ServiceManager"); Method method = serviceManager.getMethod("getService", String.class); Object invoke = method.invoke(null,Context.TELEPHONY_SERVICE); //使用AIDL得到接口对象 ITelephony asInterface = ITelephony.Stub.asInterface((IBinder) invoke); //通过AIDL得到的对象,调用挂断电话的方法 asInterface.endCall();
相关文章推荐
- 人工智能领域中声源定位的研究与发展------第二章 声源定位系统 (3)
- 不懂技术的人请不要对懂技术的人说这很容易
- 打包contrail-setup
- LeetCode 11 Container With Most Water
- $GetDomesticAirlinesTimeResult_type0@2bb5340c类错误
- HDOJ 1021 Fibonacci Again
- 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes
- leetcode之Contains Duplicate
- 大麦回忆录-maizuo开发
- Handler sendMessage 与 obtainMessage (sendToTarget)比较
- Leetcode220-Contains Duplicate III
- Compiler Error Message: The compiler failed with error code 128. 的问题解决
- http://blog.csdn.net/name_Uncle_Wang/article/details/46438641?ref=myread
- 出现set_locale() failed (5): Input/output error的解决方法
- scanf问题
- Climbing Stairs爬楼梯——动态规划
- 9 Ways to Instantly Strengthen Your Brain
- [POJ 1273] Drainage Ditches & 最大流Dinic模板
- SceneRenderer_Main中的方法
- 记使用WaitGroup时的一个错误