您的位置:首页 > 移动开发 > Android开发

Android:广播+AIDL实现电话拦截

2017-02-13 18:48 429 查看
首先我们给大家分享一下电话拦截的实现方法,可以设置你要拦截的号码,因为现在电话骚扰太多,比如营销呀,诈骗呀等等,所以实现一个对某些号码(比如陌生号码、指定号码、黑名单等)进行拦截以避免骚扰。为了大家更好的了解,我就先给大家介绍电话拦截实现的步骤。

1、建一个demo,在demo下新建一个aidl文件夹,把官方的文件夹复制到该文件夹下,然后将demo重新编译。

2、新建一个类(PhoneEnd.java)继承broadcastreceiver,重写它的onReceive()方法,代码如下:

public class PhoneEnd extends BroadcastReceiver{

private Method method;
private ITelephony iTelephony;

@Override
public void onReceive(Context context, Intent intent) {
if ("android.intent.action.PHONE_STATE".equals(intent.getAction())) {
String phone = intent.getStringExtra("incoming_number");
if ("15211001523".equals(phone)){
Log.i("test", "onReceive: 主人来电啦~~~"+phone);
try {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);//电话的管理者
Class<TelephonyManager> telephonyManagerClass = TelephonyManager.class;//得到电话管理者的class对象
method = telephonyManagerClass.getDeclaredMethod("getITelephony", null);//获取电话TelephonyManager.getITelephony方法的method的对象
method.setAccessible(true);//允许访问私有方法
iTelephony = (ITelephony) method.invoke(telephonyManager, null);//调用getITelephony方法返回ITelephony类的对象
iTelephony.endCall();//挂断电话
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}3、既然要拦截电话,必然是需要权限的,所以需要在清单文件(AndroidManifest.xml)中设置读取电话以及挂断电话的权限;还需要在清单文件AndroidManifest.xml)中增加PhoneEnd.java的注册。代码如下:
<!--读取电话状态权限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--增加挂断电话的权限-->
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<!--配置广播接收者-->
<receiver android:name=".PhoneEnd">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE">
</action></intent-filter>
</receiver>以上所示,就可以实现电话拦截的效果,接受来电之后的广播会对号码进行判断,然后通过官方提供的AIDL中的方法直接挂断,并且不会有记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: