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中的方法直接挂断,并且不会有记录。
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中的方法直接挂断,并且不会有记录。
相关文章推荐
- android拦截电话(AIDL+广播)
- android调用ITelephony类,AIDL实现电话,联系人黑名单拦截挂断服务
- Android广播接实现监听电话状态(电话的状态,拦截)
- Android广播接实现电话的监听(电话的状态,拦截)
- Android广播接实现电话的监听(电话的状态,拦截)
- 这篇文章给大家介绍Android开发四大组件之实现电话拦截和电话录音,涉及到android四大基本组件在程序中的应用,对android四大基本组件感兴趣的朋友可以参考下本篇文章
- android 使用广播接收者监听短信和拦截外拨电话
- Android电话拦截及拦截提示音的实现
- android 使用广播接收者监听短信和拦截外拨电话
- Android-实现对指定电话的短信拦截和来电拦截
- android学习笔记---38_采用广播接收者拦截外拔电话,实现原理以及实例源码
- Android四大组件应用系列——实现电话拦截和电话录音
- AIDL实现进程间通信,应用于电话拦截
- Android 实现电话拦截及拦截提示音功能的开发
- Android终止广播实现短信拦截
- android AIDL机制 电话拦截
- Android -- 怎么发出和接收广播, Broadcast, 电话拨号拦截,短信拦截
- Android -- 怎么发出和接收广播, Broadcast, 电话拨号拦截,短信拦截
- Android-服务与广播实现简单电话录音
- Android电话拦截实现以及TelephonyManager监听的取消