android黑名单挂断电话(endCall)反射方法获取
2016-06-04 17:40
465 查看
由于保证手机安全性,挂断电话的endcall方法被隐藏了。但是我们可以通过java反射机制获得此方法去拦截电话,下面代码为拦截电话片段代码。请参阅
* 挂断电话(通过反射机制获得隐藏的endCall方法)
*/
private void endCall() {
try {
//通过类加载器加载ServiceManager
Class<?> clazz = getClassLoader().loadClass("android.os.ServiceManager");
//通过反射得到当前的方法
Method method = clazz.getDeclaredMethod("getService", String.class);
IBinder iBinder = (IBinder) method.invoke(null, TELEPHONY_SERVICE);
ITelephony iTelephony = ITelephony.Stub.asInterface(iBinder);
iTelephony.endCall();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取到系统的电话服务 TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); MyPhoneStateListener listener = new MyPhoneStateListener(); //设置监听 tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
private class MyPhoneStateListener extends PhoneStateListener { //电话状态改变的监听 @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); // * @see TelephonyManager#CALL_STATE_IDLE 电话闲置 // * @see TelephonyManager#CALL_STATE_RINGING 电话铃响的状态 // * @see TelephonyManager#CALL_STATE_OFFHOOK 电话接通 switch (state){ //电话铃响的状态 case TelephonyManager.CALL_STATE_RINGING: String mode = dao.findNumber(incomingNumber); /** * 黑名单拦截模式 * 1 全部拦截 电话拦截 + 短信拦截 * 2 电话拦截 * 3 短信拦截 */ if(mode.equals("1")|| mode.equals("2")){ System.out.println("挂断黑名单电话号码"); Uri uri = Uri.parse("content://call_log/calls"); getContentResolver().registerContentObserver(uri,true,new MyContentObserver(new Handler(),incomingNumber)); //挂断电话 endCall(); } break; } } } /** * 挂断电话(通过反射机制获得隐藏的endCall方法) */ private void endCall() { try { //通过类加载器加载ServiceManager Class<?> clazz = getClassLoader().loadClass("android.os.ServiceManager"); //通过反射得到当前的方法 Method method = clazz.getDeclaredMethod("getService", String.class); IBinder iBinder = (IBinder) method.invoke(null, TELEPHONY_SERVICE); ITelephony iTelephony = ITelephony.Stub.asInterface(iBinder); iTelephony.endCall(); } catch (Exception e) { e.printStackTrace(); } }
* 挂断电话(通过反射机制获得隐藏的endCall方法)
*/
private void endCall() {
try {
//通过类加载器加载ServiceManager
Class<?> clazz = getClassLoader().loadClass("android.os.ServiceManager");
//通过反射得到当前的方法
Method method = clazz.getDeclaredMethod("getService", String.class);
IBinder iBinder = (IBinder) method.invoke(null, TELEPHONY_SERVICE);
ITelephony iTelephony = ITelephony.Stub.asInterface(iBinder);
iTelephony.endCall();
} catch (Exception e) {
e.printStackTrace();
}
}
相关文章推荐
- Java反射随记
- AS3中的反射(速记) 分析
- C# 反射(Reflection)的用处分析
- C#通过反射创建自定义泛型
- 通俗易懂的C#之反射教程
- C#根据反射和特性实现ORM映射实例分析
- 深入反射生成数组的详解
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射技术实现去掉按钮选中时的边框效果
- C#泛型和反射实例解析
- C# Dynamic关键字之:dynamic为什么比反射快的详解
- 传智播客学习之java 反射
- java中利用反射调用另一类的private方法的简单实例
- Java 反射之私有字段和方法详细介绍
- php使用反射插入对象示例分享
- java反射使用示例分享
- java利用反射实现动态代理示例
- 用户控件(ASCX)向网页(ASPX)传值使用反射实现
- 基于Java回顾之反射的使用分析
- c#反射调用方法示例