1. 床架aidl文件,ITelephony.aidl 这个文件创建在aidl文件夹下面的 com.android.internal.telephony包下面

2. ITelephony文件里面添加接口与方法,这样自己写这个文件并且只添加这两个方法的话就不用再引入 CellInfo.aidl 这样的文件了(注意:这个文件的内容可以使用google提供的内容,里面有很多其他的接口,这里我没搞清楚这样自定义和使用google提供的那个文件之间的区别)

package com.android.internal.telephony;interface ITelephony{boolean endCall();  // 这个是后面用来被调用结束通话的void answerRingingCall();}

3. 通过一个服务来动态开启一个监听电话的广播

3.1 监听的广播类

public class BlackListPhoneReceiver extends BroadcastReceiver {private TelephonyManager tm;@Overridepublic void onReceive(Context context, Intent intent) {// 获取黑名单数据,和这个收信人进行比较JXBlackListDao dao = new JXBlackListDao(context);List<BlackListContact> blackListContacts = dao.queryAll();tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);// 监听电话的状态,就是是否有电话呼入switch (tm.getCallState()) {case TelephonyManager.CALL_STATE_RINGING:   // 开始响铃String incomingNum = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);  // 获取来电的号码// 这个来电号码和黑名单中的进行比较(这里是将手机里面的黑名单数据库,这个库是自己创建并且添加号码的),如果这个号码和黑名单中的号码相同那么就挂掉这个电话并且删除他的通话记录,这里删除通话记录的方式是最简单的for (BlackListContact contact :blackListContacts) {if (contact.getPhone().equals(incomingNum)&& (contact.getType() == BlackListContact.BlackType.ALL|| contact.getType() == BlackListContact.BlackType.PHONE)) {endCall();SystemClock.sleep(1000);// 删除通话记录ContentResolver resolver = context.getContentResolver();Uri uri = Uri.parse("content://call_log/calls");resolver.delete(uri, "number=?", new String[]{incomingNum});}}Toast.makeText(context, "来电是" + incomingNum, Toast.LENGTH_SHORT).show();break;}}// 挂断电话private void endCall() {Log.e("John", "BlackListReceiver" + " # " + "end call method running ");Class<TelephonyManager> clz = TelephonyManager.class;try {Method getITelephony = clz.getDeclaredMethod("getITelephony", null);getITelephony.setAccessible(true);ITelephony iTelephony = null;Log.e("John", "BlackListReceiver" + " # " + "end call");iTelephony = (ITelephony) getITelephony.invoke(tm, null);iTelephony.endCall();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (RemoteException e) {Log.e("John", "BlackListReceiver" + " # " + "endcall error");e.printStackTrace();}}
}

3.2 注册广播的服务类

public class BlackListService extends Service {

private BlackListPhoneReceiver phoneReceiver;@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {// 电话监听的广播注册phoneReceiver = new BlackListPhoneReceiver();IntentFilter filter2 = new IntentFilter();filter2.addAction("android.intent.action.NEW_OUTGOING_CALL");filter2.addAction("android.intent.action.PHONE_STATE");filter.setPriority(Integer.MAX_VALUE);registerReceiver(phoneReceiver, filter2);    // 注册广播
    }@Overridepublic void onDestroy() {super.onDestroy();// 关闭服务msgReceiver = null;phoneReceiver = null;}}

4. 在页面中添加一个按钮,开启服务的时候就会动态的注册开启拦截电话的广播咯

转载于:https://www.cnblogs.com/xxss0903/p/5865413.html

android 电话拦截相关推荐

  1. 广播接收者android,电话拦截广播,电话接收者demo

    一.Android广播机制介绍 广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的. Android中广播的是操作系统中产生的各种各样的事件.例如,收到一条短信就会 ...

  2. Android电话拦截及拦截提示音的实现

    本文所讲的内容是在Android系统中如何写程序进行 电话拦截,并发出拦截提示音提醒用户,可以说此功能还是比较实用的. 1.电话拦截 这个功能大家可能都知道了,就是利用反射原理调用ITelephony ...

  3. android电话拦截软件下载,骚扰电话拦截器

    骚扰电话拦截器是一款支持自定义数据库的电话拦截软件,你可以自定义的在上面倒入各种骚扰电话的数据或者是API,这款软件会通过这些API来帮助你进行拦截,小巧的体积以及轻松的操作方式非常适合那些需要高颜D ...

  4. android电话拦截

    其实大家可以下载 xxx卫士看下,它设置来电拒接模式后,都是会启动设置MMI指令的界面.然后再去"设置->通话设置->来电转接",看看 "占线时转接" ...

  5. android 电话拦截短信验证码,全警出击,只为寻找一位正在买新手机的女士……...

    5月17日12时10分,拱墅分局米市巷派出所接到预警:辖区内有人(程女士,化名)疑似接到冒充公检法诈骗电话.接到预警后,派出所领导高度重视,立即组织反诈专班警力展开相关工作. 辅警章毅立即拨打程女士本 ...

  6. android 电话拦截短信验证码,时至今日,苹果手机这项近乎极端的功能,是安卓机依旧没赶上的...

    在以往,从来都是安卓机追在苹果手机身后跑. 但近几年来,安卓机发展得非常快.甚至在一些地方,把苹果手机远远甩在身后. 例如,安卓机能长截图. 至今为止,iPhone都要一张一张地截图,而安卓手机能一键 ...

  7. Android屏蔽呼出电话提示音,Android来电拦截及拦截后的提示音

    Android电话拦截及拦截后的提示音 1. 电话拦截 这个功能大家可能都知道了,就是利用反射原理调用ITelephony的隐藏方法来实现.这个就不说了,在附件的代码里有. 2.拦截后提示忙音/空号/ ...

  8. android电话、短信黑白名单拦截、电话录音

    功能描述: 总的来说这是一个防骚扰的应用,设置黑名单,白名单,通话录音名单.添加到黑名单的联系人或号码将被拒绝来电或短信:添加到白名单的联系人或号码将通过来电或短信(除白名单以外的号码将被拒绝来电或短 ...

  9. Android之电话拦截

    今天来和大家一起分享一下我最近写的一个Demo,类似于黑名单访问,也就是我们俗称的电话拦截 首先我们需要两个aidl文件 第一个:NeighboringCellInfo.aidl package an ...

最新文章

  1. STM32 基础系列教程 27 - USB_HID
  2. GDCM:gdcm::ServiceClassUser的测试程序
  3. jQuery之高级选择器
  4. 阿里要把雄安打造成AI第一城:未来30年城市长啥样?
  5. 客户服务器网络系统的优缺点,浅析网络存储方案的三种类型及其优缺点
  6. java 泛型的问题_java 泛型问题?
  7. 设计模式-工厂模式-3种-以手机制造工厂为例
  8. 09.第十章.项目沟通和干系人管理
  9. AOE网络-关键路径
  10. 在Kubuntu14.04中安装小企鹅输入法
  11. 解决打开VMware虚拟机时Take Ownership出错的问题
  12. 怎么下载高清无水印的视频号作品?视频号下载要用什么工具?1分钟解决微信视频号下载
  13. R语言 - 集成开发环境IDE
  14. Simulink/Carsim联合仿真,基于pid,mpc自适应巡航控制,定速巡航,紧急避撞等
  15. Linux:centos7安装下载工具aria2
  16. 《C++新经典Linux C++通信架构实战》第1章 课程介绍
  17. Carla设置同步模式
  18. java OOP面向对象编程—2
  19. windowsXP日常应用技巧及经验总结
  20. 单页应用与多页应用的区别及优缺点

热门文章

  1. oracle替换mysql_老师,您好 oracle sql 语句 替换mysql 语句
  2. myeclipse怎样批量重命名变量_360问答 快捷键Shift+Alt+R,选择你要改的,改完后按回车就可以了。修改的是所有的,小心...
  3. 初学 淘宝客API 从入门到放弃
  4. 进化材料基因:机器学习如何推动下一代新材料的发现
  5. A. Boboniu Chats with Du
  6. 给两个数算出其中的素数
  7. BrainTree信用卡包
  8. 分角色软件系统流程图
  9. 为了满足中国人的胃 马来西亚棕榈油巨头都改种榴莲了……
  10. sklearn MLP红酒分类