在这里跟大家分享下仿手机号码拦截,比如你设置一个号码,然后这个号码打电话进来就会被自动挂掉而且手机不会有任何的记录。
我们的实现思路是直接接受来电的广播判断号码然后用官方提供的AIDL中的方法去挂掉电话。
广播代码如下:
public class State extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if("android.intent.action.PHONE_STATE".equals(intent.getAction())){
//获取电话号码
String number=intent.getStringExtra("incoming_number");
if("***********".equals(number)){
try {
//电话管理者
TelephonyManager tm= (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
Class<TelephonyManager> telephonyManagerClass=TelephonyManager.class;
//获取TelephonyManager.getITelephony的Method对象
Method method=telephonyManagerClass.getDeclaredMethod("getITelephony",null);
//允许访问私有的方法
method.setAccessible(true);
//调用getITelephony方法返回ITelephont类对象
ITelephony telephony= (ITelephony) method.invoke(tm,null);
//调用方法挂断电话
telephony.endCall();
} catch (Exception e) {
e.printStackTrace();
}
//
}
}
}
}
详细的解释都在注释中,然后这里的ITelephony是我们AIDL编译后产生的类。
在清单文件中要加入二条权限和配置一下广播就可以了。
权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
广播的注册:
<receiver android:name=".State">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"></action>
</intent-filter>
</receiver>
好了,电话拦截就可以实现了。