Android开发之通过反射获取到挂断电话的API
Android开发黑名单工具类,需要用到挂断电话的API,但是该API处于隐藏状态,需要通过反射得到该方法。、
步骤:
1.通过当前类获取到ServiceManager的字节码
Class< ? > clazz = CallSafeService.class.getClassLoader().loadClass("android.os.ServiceManager");
2.使用getDeclaredMethod()方法得到该方法
Method method = clazz.getDeclaredMethod("getService", String.class);
3.通过invoke()方法执行该方法,获取到IBinder对象
IBinder ibinder = (IBinder) method.invoke(null, TELEPHONY_SERVICE);
4.获取到了IBinder对象了,就可以得到ITelephony方法
ITelephony iTelephony = ITelephony.Stub.asInterface(ibinder);
5.使用ITelephony中的endCall()方法,实现挂断电话的功能。
iTelephony.endCall();
其中需要把android的AIDL拷贝到当前工程下,且ITelephony.aidl的包名必须保持一致
ITelephony.aidl包名:com.android.internal.telephony
ITelephony.aidl还需要用到NeighboringCellInfo.aidl文件,把这个文件也拷贝到当前工程下
NeighboringCellInfo.aidl包名:android.telephony
然后就可以使用了挂断电话功能了。
代码:
private void endCall() {
/**该方法使用反射,获取到SystemManger的方法getService()
* SystemManger隐藏了,无法直接使用。需要使用反射
*IBinder iBinder=SystemManger.getService(TELEPHONY_SERVICE);
*/
try {
//获取到systemmanger的字节码
Class< ? > clazz = CallSafeService.class.getClassLoader().loadClass("android.os.ServiceManager");
//获取到该方法,参数1:方法名,参数2:该方法需要传入参数的类型
Method method = clazz.getDeclaredMethod("getService", String.class);
try {
//使用该方法,参数1:该方法的执行者,static可以设置为null 参数2:该方法的参数
IBinder ibinder = (IBinder) method.invoke(null, TELEPHONY_SERVICE);
//通过iBinder获取到ITelephony对象,然后就可以调用ITelephony的endCall()方法了。
ITelephony iTelephony = ITelephony.Stub.asInterface(ibinder);
try {
//挂断电话
iTelephony.endCall();
} catch ( RemoteException e ) {
e.printStackTrace();
}
} catch ( IllegalAccessException e ) {
e.printStackTrace();
} catch ( InvocationTargetException e ) {
e.printStackTrace();
}
} catch ( ClassNotFoundException e ) {
e.printStackTrace();
} catch ( NoSuchMethodException e ) {
e.printStackTrace();
}
}
Android开发之通过反射获取到挂断电话的API的更多相关文章
- Android开发之通过反射获取到Android隐藏的方法
在PackageManger中,有些方法被隐藏了,无法直接调用,需要使用反射来获取到该方法. 比如方法:getPackageSizeInfo(),通过这个方法可以获取到apk的CacheSize,Co ...
- 挂断电话demo
<!-- 结束通话和打电话的权限 --> <uses-permission android:name="android.permission.CALL_PHONE" ...
- .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)——转载
原文链接:https://blog.walterlv.com/post/dotnet-high-performance-reflection-suggestions.html ***** 大家都说反射 ...
- 原 .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
大家都说反射耗性能,但是到底有多耗性能,哪些反射方法更耗性能:这些问题却没有统一的描述. 本文将用数据说明反射各个方法和替代方法的性能差异,并提供一些反射代码的编写建议.为了解决反射的性能问题,你可以 ...
- Android接听、挂断电话
新建一个名为ITelephony的aidl文件,注意包名不能改变,因为是通过反射方式来实现接听和挂断的
- Android开发——Notification通知的使用及NotificationCopat.Builder常用设置API
想要看全部设置的请看这一篇 [转]NotificationCopat.Builder全部设置 常用设置: 设置属性 说明 setAutoCancel(boolean autocancel) 设置点击信 ...
- Android 开发工具类 31_WebService 获取手机号码归属地
AndroidInteractWithWebService.xml <?xml version="1.0" encoding="utf-8"?> & ...
- Android通过AIDL和反射调用系统拨打电话和挂断电话
首先在项目中添加ITelephony.aidl文件,我的如下: /* * Copyright (C) 2007 The Android Open Source Project * * Licensed ...
- Android开发 - Retrofit 2 使用自签名的HTTPS证书进行API请求
为了确保数据传输的安全,现在越来越多的应用使用Https的方式来进行数据传输,使用https有很多有点,比如: HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,要比ht ...
随机推荐
- AJAX请求遭遇未登录和Session失效的解决方案
使用技术:HTML + Servlet + Filter + jQuery 一般来说我们的项目都有登录过滤器,一般请求足以搞定.但是AJAX却是例外的,所以解决方法是设置响应为session失效. 一 ...
- Flash制作遇到的小问题1--为何变形需要将图形打散(Ctrl+b)
今天上Flash实验课遇到一个小问题,就是我在画一个矩形如下图:
- 【CocoaPods】配置CocoaPods前 - 本地安装好Ruby环境
xcode (反正就是代码编辑器) Xcode就不用说了把. homebrew (反正就是软件管理器) homebrew是一个包管理器,用于在mac上安装一些os x上没有的UNiX工具(比如wget ...
- JDBC 学习笔记(二)—— 大数据+存储过程+批处理+事务管理
本文目录: 1.使用JDBC处理大数据 2.使用JDBC处理大文本 3.使用JDBC处理二进制数据 4.Oracle中大数据处理 5 ...
- Codeforces Round #343 (Div. 2) C. Famil Door and Brackets
题目链接: http://codeforces.com/contest/629/problem/C 题意: 长度为n的括号,已经知道的部分的长度为m,现在其前面和后面补充‘(',或')',使得其长度为 ...
- JXL读取写入excel表格数据
问题描述: 使用java的jxl包创建.写入excel表格数据 问题解决: (1)说明 (2)写入execel数据 注: 以上是写入数据需要调用的函数接口 注: 具体接口调用过程,如上所示 (3)读取 ...
- PHP之implode与explode函数讲解
implode (PHP 4, PHP 5) implode — 将一个一维数组的值转化为字符串 说明¶ string implode ( string $glue , array $pieces ) ...
- object-c 入门基础篇
原地址:http://www.cnblogs.com/moonvan/archive/2011/10/13/2210498.html 一.Objective-C与C的渊源 Objective-C诞生于 ...
- javax.mail.MessagingException: 501 Syntax: HELO hostname Linux端异常解决
在项目里面使用javamail在window环境正常,放在服务器上面的时候抛出异常javax.mail.MessagingException: 501 Syntax: HELO hostname ,原 ...
- pycharm 基础教程
pycharm 教程(一)安装和首次使用 PyCharm 是我用过的python编辑器中,比较顺手的一个.而且可以跨平台,在macos和windows下面都可以用,这点比较好. 首先预览一下 PyCh ...