Android Studio使用ITelephony.aidl 和 NeighboringCellInfo.aidl拦截电话,以及解决 java.lang.NoSuchMethodError: No interface method endCall()Z in class Lcom/android/internal/telephony/ITelephony; 异常

1、先下载两个aidl文件

链接: https://pan.baidu.com/s/1fqBDTBVmzcX3VgmNXYSOiw.
提取码:5u1v

2、在项目中添加两个aidl文件 注意要先新建个aidl文件夹(与java文件夹同级) 再将文件添加到aidl文件夹下相应的路径 如图 (两种视角)

3、Build -> clean project 让AS重新构建一下 如果没问题的话 会在generated目录生成对应java类 如图

4、此时就可利用反射得到ITelephony对象调用endCall()方法进行电话的拦截

try {//获取类@SuppressLint("PrivateApi")Class<?> serviceManager = Class.forName("android.os.ServiceManager");//获取方法Method getService = serviceManager.getMethod("getService", String.class);//使用方法IBinder invoke = (IBinder) getService.invoke(null, Context.TELEPHONY_SERVICE);ITelephony iTelephony = ITelephony.Stub.asInterface(invoke);assert iTelephony != null;b = iTelephony.endCall();} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | RemoteException e) {e.printStackTrace();}

此时如果是在api28以下的设备中可以正常拦截 但api28以上的设备会报如下错误:

java.lang.NoSuchMethodError: No interface method endCall()Z in class Lcom/android/internal/telephony/ITelephony;

出现这个异常的原因就是因为在api28以上的设备时 不再支持反射 而是同过TelecomManager调用endCall()方法 所以我们要多进行一步判断

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {TelecomManager manager = (TelecomManager) getSystemService(Context.TELECOM_SERVICE);if (manager != null) {if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ANSWER_PHONE_CALLS) != PackageManager.PERMISSION_GRANTED) {Toast.makeText(getApplicationContext(),"没有权限,拦截失败!",Toast.LENGTH_SHORT).show();}b = manager.endCall();}}

在调用TelecomManager 的endCall()放发时需要Manifest.permission.ANSWER_PHONE_CALLS权限

<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />

这样就解决了这个异常 并且可以正常拦截电话 最后 完整拦截代码如下

private void endCall(String phone) {boolean b = false;//判断是否拦截成功if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {TelecomManager manager = (TelecomManager) getSystemService(Context.TELECOM_SERVICE);if (manager != null) {if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ANSWER_PHONE_CALLS) != PackageManager.PERMISSION_GRANTED) {Toast.makeText(getApplicationContext(),"没有权限,拦截失败!",Toast.LENGTH_SHORT).show();}b = manager.endCall();}}else {//ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));try {//获取类@SuppressLint("PrivateApi")Class<?> serviceManager = Class.forName("android.os.ServiceManager");//获取方法Method getService = serviceManager.getMethod("getService", String.class);//使用方法IBinder invoke = (IBinder) getService.invoke(null, Context.TELEPHONY_SERVICE);ITelephony iTelephony = ITelephony.Stub.asInterface(invoke);assert iTelephony != null;b = iTelephony.endCall();} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | RemoteException e) {e.printStackTrace();}}if(b){Toast.makeText(getApplicationContext(),"成功拦截",Toast.LENGTH_SHORT).show();}}

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

  1. 关于黑马手机卫士的学习总结

    经过一个多月的不懈努力,终于完成了这个手机卫士的项目.时间都是挤出来的,不容易啊.现在稍稍的总结一下,分享给大家http://pan.baidu.com/s/1qY10Ffu (一)splash界面 ...

  2. Android核心基础(手机卫士的一个知识点总结)

    注意:有些功能是需要权限的,在这里并没有写出来,在程序运行中,根据程序报的错误,添加相应的权限即可,里面的具体里面可能有一些小细节,没有明确的写出来,具体的需要在程序中自己调试,解决. 这个总结涵盖了 ...

  3. 360手机卫士经典案例分析

    摘要 对360手机卫士在保持和吸引顾客方面的独特之处进行了研究,从360手机卫士产品本身,到与产品有关的一系列渠道.定价和促销的营销组合,分析360手机卫士给顾客传递和传播的价值,并结合顾客感知价值这 ...

  4. 黑名单电话自动拦截【Android】

    1.功能描述: 当前手机中保存了一些黑名单电话号(如110等) 当一个电话打入进来, 如果它刚好是一个黑名单号码, 就会自动将电话挂断 过程分析: 启动服务 在服务中监听电话状态, 当电话状态是响铃时 ...

  5. android 电话号码标记,强化电话标记功能 360手机卫士3.0安卓版体验

    作为"房产商",上海仁恒置地集团营销总监姚伟示通常每天也要接到20个左右房产或其他推销电话."现在已经形成了一个机械的对应方式,对于此类推销电话,很多人包括我自己已经麻木 ...

  6. 安卓_手机卫士_第五天(手机定位,设备管理器,电话归属地)

    安卓手机卫士第五天(手机定位,设备管理器,电话归属地) 手机定位 网络定位 根据IP显示具体的位置, 原理是建立一个库那个IP地址对应那个地方:早期警方破案就采用此特点:纯真IP数据库软件介绍有局限性 ...

  7. 黑马程序员之手机卫士第五天

    电话归属地在手机窗体上悬浮显示 1,悬浮在手机上(悬浮框不停留在手机卫士应用(界面)中,所以需要去开启一个服务,在服务中去管理toast代码逻辑) 1.点击是否开启归属地显示的自定义组合控件Setti ...

  8. Android之手机卫士涉及的知识点总结

    手机卫士涉及的知识点总结 Splash界面 splash: 溅,洒 展现产品的logo提升产品的知名度 初始化操作(创建数据库,读取配置文件) 连接服务器检查软件授权 连接服务器检查软件的更新 自动更 ...

  9. Android项目实战--手机卫士

    Android项目实战--手机卫士--结束 很久都没有来更新博客了,之前一直忙着工作的事,接触到了一些以前从来没有接触过的东西,真的挺有挑战性的,但也有很多的无奈,但也学习到了很多东西,我会慢慢的写到 ...

最新文章

  1. 强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例
  2. ip addr 命令:LOWER_UP字段意义
  3. html a标签锚点跳转的简单应用
  4. IEEE Spectrum 2014 年度编程语言排名
  5. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第二题:骰子迷题
  6. OpenAI“单手解魔方”被公开质疑,Gary Marcus称七大问题涉嫌误导
  7. Integer包装类特殊之处
  8. NSMutableDictionary中 setValue和setObject的区别
  9. 计算机应用基础山东省,2019年山东省中等职业学校对口升学考试:计算机文化基础+计算机应用基础模拟试卷...
  10. html5 页面答题算分,JavaScript实现答题评分功能页面
  11. fibonacci数列python_从 Python 计算 Fibonacci 数列说起
  12. mysql存储过程教程(1)
  13. 北大计算机学硕几年,我的OI经历 --张正超(深学教育资深教练、北大计算机系研究生)...
  14. 【go网络编程】-HTTP编程
  15. 写给电脑小白的电脑科普
  16. linux网络对时命令
  17. RS锁存器,D锁存器、D触发器简介
  18. 紫外光谱分析的基本原理是什么
  19. for循环,for循环嵌套
  20. 从零开始学WEB前端——CSS基础

热门文章

  1. 【计算机网络】计算机网络、互联网、互连网、因特网、万维网
  2. 计算几何入门 1.4:凸包的构造——Jarvis March算法
  3. .net core with 微服务 - Polly 熔断降级
  4. 几种主流快速开发平台选择
  5. 计算机主机无反应,电脑突然开不了机、主机没反应、不显示,几个方法轻松解决...
  6. 机械硬盘显示可用空间0字节要如何办啊
  7. mysql错误代码1068_数据库1068错误
  8. SQLServer数据库备份的使用
  9. Eclipse下的Setting property 'source' to '...' did not find a matching property 错误
  10. java,png,jpg,多张图片合成一个pdf,压缩图片,并且保证图片不失帧。