1.功能描述:

当前手机中保存了一些黑名单电话号(如110等)

当一个电话打入进来, 如果它刚好是一个黑名单号码, 就会自动将电话挂断

过程分析:

启动服务

在服务中监听电话状态,

当电话状态是响铃时, 判断是否为黑名单号

如果是, 挂断电话

2.相关API

TelephonyManager: 电话服务的管理器

context.getSystemService(Context.TELEPHONY_SERVICE)

: 得到它的对象

listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE)

:监听电话状态:

PhoneStateListener : 电话状态监听器

onCallStateChanged(int state, String incomingNumber)

: 电话状态改变的回调方法

TelephonyManager.CALL_STATE_IDLE : 空闲状态

TelephonyManager.CALL_STATE_RINGING : 响铃状态

TelephonyManager.CALL_STATE_OFFHOOK : 接通状态

3.挂断电话

说明:Android没有对外公开结束通话的API,如果需要结束通话,必须使用AIDL与电话管理服务进行通信,并调用服务中的API实现结束通话,方法如下:

1).从sdk的源码中复制下面一个文件
 com/android/internal/telephony/ITelephony.aidl

2).调用ITelephony.endCall()结束通话
 Method method = Class.forName("android.os.ServiceManager")
  .getMethod("getService", String.class);
 IBinder binder = (IBinder)method.invoke(null, Context.TELEPHONY_SERVICE);
 ITelephony telephony = ITelephony.Stub.asInterface(br);
 telephony.endCall(); inde

3). 声明打/挂断电话的权限
 <uses-permission android:name="android.permission.CALL_PHONE" />

4.代码实现

1).ListenCallService

package com.example.appservice;import java.lang.reflect.Method;import com.android.internal.telephony.ITelephony;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;public class ListenCallService extends Service {private TelephonyManager tm;private PhoneStateListener listener = new PhoneStateListener() {// 当通话状态发生改变时调用public void onCallStateChanged(int state, String incomingNumber) {switch (state) {case TelephonyManager.CALL_STATE_IDLE:// 空闲(挂断电话/未来电之前)Log.e("TAG", "空闲(挂断电话/未来电之前)");break;case TelephonyManager.CALL_STATE_RINGING:// 响铃Log.e("TAG", "响铃");// 如果来电是黑名单号(110),就挂断电话if ("110".equals(incomingNumber)) {try {endCall();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case TelephonyManager.CALL_STATE_OFFHOOK:// 接通Log.e("TAG", "接通");break;default:break;}}};@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}/** 挂断电话*/private void endCall() throws Exception {// 通过反射调用隐藏的API// 得到隐藏类的Class对象Class c = Class.forName("android.os.ServiceManager");// 得到方法所对应的Method对象Method method = c.getMethod("getService", String.class);// 调用方法IBinder iBinder = (IBinder) method.invoke(null,Context.TELEPHONY_SERVICE);// 得到接口对象ITelephony telephony = ITelephony.Stub.asInterface(iBinder);// 结束通话telephony.endCall();}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();// 得到电话管理器tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);// 监听电话状态tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();// 停止电话监听tm.listen(listener, PhoneStateListener.LISTEN_NONE);}
}

2).黑名单拦截功能的开关

<span style="white-space:pre">  </span>public void startListenCall(View v){startService(new Intent(this, ListenCallService.class));}public void stopListenCall(View v){stopService(new Intent(this, ListenCallService.class));}

3).注册Service

<service android:name="com.example.appservice.ListenCallService"></service>

5.设置开机即开启黑名单

<receiver android:name="com.example.appservice.BootReceiver"><intent-filter ><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter></receiver>
package com.example.appservice;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/*** 接收开机完成广播的receiver* @author Xiaocici**/
public class BootReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//启动电话监听的receivercontext.startService(new Intent(context, ListenCallService.class));}}

黑名单电话自动拦截【Android】相关推荐

  1. 黑马手机卫士黑名单电话拦截 使用ITelephony.aidl和NeighboringCellInfo.aidl 自动拦截黑名单电话 附文件

    Android Studio使用ITelephony.aidl 和 NeighboringCellInfo.aidl拦截电话,以及解决 java.lang.NoSuchMethodError: No ...

  2. android 自动读取短息,Android实现短信验证码自动拦截读取功能

    本文实例为大家分享了Android短信验证码自动拦截读取 的具体代码,供大家参考,具体内容如下 知识准备: 1.观察者模式的理解[文章稍后来到~~] 2.Android的Cursor使用[Androi ...

  3. 自动化软件测试 - 通过 Android Studio 开发 App 自动拦截读取短信验证码

        之前一期介绍了怎样通过 Python 的代码去获取短信验证码去进行软件测试,这一期将主要介绍 怎样 通过 Android Studio 开发 App 自动拦截读取短信验证码.     Andr ...

  4. Android 电话自动接听和挂断详解

    1.通过aidl及反射实现挂断电话 具体分三步: (1)ITelephony.aidl ,必须新建com.android.internal.telephony包并放入ITelephony.aidl文件 ...

  5. android 拨测软件,通信网络性能管理系统中电话自动拨测技术的实现

    摘要: 当今世界,无线通信技术已经非常普遍,通信网络的覆盖区域越来越广,无线通讯技术的飞速发展为我们的生活带来了极大的便利.通信网络结构趋于复杂,伴随着通信网络使用的设备也趋于复杂,所以如何进行有效地 ...

  6. uni-app 实现拨打电话功能(android)

    最近项目中需要拨打电话功能,项目中实现拨打电话的代码如下,包括微信和真机拨打电话两种方式,特此记录便于日后查阅. //#ifdef MP-WEIXIN uni.makePhoneCall({phone ...

  7. android 默认dimens_Android开发——自动生成Android屏幕适配的dimens.xml文件

    使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...

  8. 自动备份android,Android自动备份错误

    我正在尝试实现android自动备份(Android 6.0),但是它不起作用. 我得到了同样的错误 10-28 22:58:06.980 600-5578/? I/PFTBT: Initiating ...

  9. c5绑定steam显示服务器内部错误,C5GAME实现Steam非正常交易自动拦截,轻松规避诈骗...

    原标题:C5GAME实现Steam非正常交易自动拦截,轻松规避诈骗 Steam玩家都知道,经常会有莫名其妙的人加你游戏好友,然后再给你发送个链接让你去点击,所连接的网址自然是骗子交易链接或者钓鱼网站. ...

最新文章

  1. 【神经网络】(17) EfficientNet 代码复现,网络解析,附Tensorflow完整代码
  2. Nginx 反向代理、动静分离、负载均衡及配置实例
  3. 2014年职称计算机word2003,2014年职称计算机考试Word2003模拟题及答案5
  4. linux中修改字符编码
  5. 企业实战_17_MyCat水平扩展_跨分片查询_ER分片
  6. gridview不换行,高亮显示
  7. jquery click点击事件重复执行多次
  8. ubuntu命令整理中
  9. rdkit GetAtoms获取化合物每个位置的索引;rdkit FindMCS大公共相同结构 找不同化合物之间的差异
  10. 专题:固体力学中应力与应变分析详解(5.主方向与主应力)
  11. 中国移动和路由AP218免拆机刷机教程
  12. Tableau9——计算字段
  13. html link canonical
  14. 人工神经网络的英文简称,人工神经网络英语全称
  15. 又猎一“狐”:一名外逃越南嫌疑人落网中
  16. TensorFlow1深度学习基础(笔记二)
  17. maya python教程_Chris Zurbrigg的Maya Python教程合集
  18. 自然场景文本检测识别技术综述【转】
  19. 小米AI魔法分身解密(二)
  20. B站视频CC字幕提取和转换方法

热门文章

  1. 基于C/C++获取电脑网卡的IP地址信息
  2. 汇编c 易语言编程软件,这些汇编用易语言怎么写?
  3. 双连通分量(DCC)
  4. element UI 模态层dialog自定义大小
  5. 云灾备、云容灾、云备份、数据库上云、线下线上云灾备、灾备有云等
  6. 【C#】【HttpClient】下载网络文件
  7. oracle 英文简写的日期转成数值型日期的字符串
  8. 扩展显示器失败:“显示信号输入超出范围“问题解决方案
  9. java毕业生设计中小学教务管理平台计算机源码+系统+mysql+调试部署+lw
  10. Kotlin + AndroidX + Tablayout + ViewPager + Fragment 实现Tab切页