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 ...
随机推荐
- mysql卸载
先执行mysql安装程序,点击移除,然后再删除对应的安装路径,必要的时候还要删除注册表信息.
- php字符串函数和数组函数
/验证码$str="abcdefghijklmnopqrstuvwxyz0123456789";$a=substr($str,rand(0,35),1);$b=substr($st ...
- 深入理解用mysql_fetch_row()以数组的形式返回查询结果
同mysql_result()一样,mysql_fetch_row()也可以用来获取查询结果集,其区别在于函数的返回值不是一个字符串,而是一个数组.函数定义如下. 复制代码 代码如下: array m ...
- 微信消息处理JAXP-sax解析
package cn.zhaokai.sax; import java.io.IOException; import java.io.InputStream; import java.io.Print ...
- MVC4 错误: 检测到有潜在危险的 Request.Form值
说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止.该值可能指示存在危及应用程序安全的尝试,如跨站点脚本攻击.若要允许页面重写应用程序请求验证设置,请将 httpRuntime ...
- Remote Desktop manager 连接后无法自动登录
现象: Remote Desktop manager 连接后无法自动登录 用Windows 自带的远程桌面 可以自动登录 解决方法: 在指定站点 右键 Edit Entry. 如下图处打勾就可以了.
- PHP创建XML文件讲解
<?php #code by coder_apex 2007-6-15 #自动生成一个如下的XML文件 # # <?xml version="1.0& ...
- OWASP
开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正.实际.有成本效益的信息.其目的 ...
- linux “命令行自动补全”功能用命令
是按Tab键,左上角ESC的下面两个,如果你当前目录只有一项,只需要直接Tab,如果有多项,输入前面不同的部分再Tab,一般输入3个字母就可以,如果按一下没效果,按两下会列出所有项,然后再输入一点自己 ...
- oracle sql 性能 优化
目录[-] (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table ...