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
然后就可以使用了挂断电话功能了。
原文:http://www.cnblogs.com/liyiran/p/5175756.html