通过aidl及反射实现挂断电话

具体分三步:

(1)ITelephony.aidl ,必须新建com.Android.internal.telephony包并放入ITelephony.aidl文件(构建后在gen下有ITelephony.java文件,这是aidl生成的接口),文件内容如下:

package com.android.internal.telephony;

interface ITelephony{

boolean endCall();

void answerRingingCall();

}

(2)在需要的类中添加如下方法,代码如下(通过反射获取电话接口的实例)

/**

* @param context

* @return

*/

private static ITelephony getITelephony(Context context) {

TelephonyManager mTelephonyManager = (TelephonyManager) context

.getSystemService(TELEPHONY_SERVICE);

Class c = TelephonyManager.class;

Method getITelephonyMethod = null;

try {

getITelephonyMethod = c.getDeclaredMethod("getITelephony",

(Class[]) null); // 获取声明的方法

getITelephonyMethod.setAccessible(true);

} catch (SecurityException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

try {

ITelephony iTelephony = (ITelephony) getITelephonyMethod.invoke(

mTelephonyManager, (Object[]) null); // 获取实例

return iTelephony;

} catch (Exception e) {

e.printStackTrace();

}

return iTelephony;

}

(3)在来电时调用此实例,然后调用此endCall()方法。

mTelephonyManager = (TelephonyManager) this

.getSystemService(TELEPHONY_SERVICE);

mTelephonyManager.listen(phoneStateListener,

PhoneStateListener.LISTEN_CALL_STATE);

//电话实例

PhoneStateListener phoneStateListener = new PhoneStateListener() {

@Override

public void onCallStateChanged(int state, String incomingNumber) {

switch (state) {

case TelephonyManager.CALL_STATE_RINGING :

iTelephony = getITelephony(getApplicationContext()); //获取电话接口

if (iTelephony != null) {

try {

iTelephony.endCall(); // 挂断电话

Toast.makeText(getApplicationContext(),

"endCall "+ incomingNumber +"  successful!", 3000).show();

} catch (RemoteException e) {

e.printStackTrace();

}

}

break;

default :

break;

}

}

};

//注意:在功能清单文件中添加电话的权限:

android 挂断 电话 反射,Android实现来电自动挂断实现机制相关推荐

  1. android 挂断 电话 反射,android  接听和挂断实现方式

    注意:android2.3版本及以上不支持下面的自动接听方法. (会抛异常:java.lang.SecurityException: Neither user xxxxx nor current pr ...

  2. Service-黑名单来电自动挂断

    这只是一个学习例程,很多功能有待完善 允许用户动态加载手机通讯录中的电话号码,勾选某些号码作为黑名单,一旦将某些号码设为黑名单,当该号码自动挂断该号码 Android没有对外公开挂断电话的API,如果 ...

  3. andrid之来电自动挂断电话

    先去官网下载ITelephony.aidl文件 然后在新建一个AIDL文件名字就叫ITelephony 在把下载的ITelephony.aidl替换你新建的ITelephony 重新编译 然后新建一个 ...

  4. android 4.0 电话录音,ANDROID音频系统散记之四:4.0音频系统HAL初探

    昨天(2011-11-15)发布了Android4.0的源码,今天download下来,开始挺进4.0时代.简单看了一下,发现音频系统方面与2.3的有较多地方不同,下面逐一描述. 一.代码模块位置 1 ...

  5. android自动接听和挂断电话

    实现android自动接听和挂断电话功能.代码如下: 添加权限 <uses-permission android:name="android.permission.CALL_PHONE ...

  6. android 电话漏洞,Android平台电话权限漏洞公开 手机竟能自己打电话

    闽南网7月22日讯 近日,360手机安全团队发布技术研究报告称,最新发现了一种可以让手机偷偷拨打或挂断电话的Android手机漏洞.分析报告指出,虽然目前Android4.4.3版本已修复了这一漏洞, ...

  7. Android面试:整理了Android面试官最常问的174道面试题,让你秒变offer收割机

    本文是专为 Android 开发工程师准备的高薪面试真题汇总题库,涵盖历年大厂高频面试题总结+核心考点深度解析,可以帮助大家全面梳理知识点,并针对面试中可能遇到的问题进行深入分析,在众多面试者中脱颖而 ...

  8. Autofs自动挂在实现

    Autofs介绍: 1 2 3 4 5 6 mount是用来挂载文件系统的,可以在系统启动的时候挂载也可以在系统启动后挂载.对于本地固定设 备,如硬盘可以使用mount挂载:而光盘.软盘.NFS.SM ...

  9. android 监听电话状态 来电 接听 挂断

    如果想要监听手机的来电状态  需要接收手机的电话广播 首先是静态注册 <receiver android:name=".PhoneReceiver"android:expor ...

最新文章

  1. asp.net 2.0中设定默认焦点按钮
  2. Android测试之Monkey初体验
  3. ES6第一节:开发环境的搭建
  4. 时任上海来伊份互联网事业群总裁王戈钧 :传统企业(线上+线下)移动互联网改造...
  5. axure html 360安装扩展,小编搞定win7系统360浏览器添加Axure扩展的设置方案
  6. 纯手工打造简单分布式爬虫(Python)
  7. CVSNT Manual
  8. MyCat分片规则之固定hash分片
  9. 求一亿以内的回文质数(素数)
  10. 商场云WiFi靠谱吗
  11. [源码和文档分享]基于JAVA实现的图形化页面置换算法
  12. BUPT Summer Journey #test11 A
  13. 对C++和Go语言中接口的理解
  14. 【JavaScript算法】---希尔排序(转载自我的老师 Alley-巷子)
  15. 不允许对不可访问的基类 类型强制转换 c++
  16. 趣图 | 小哥哥你怎么那么高冷呀?
  17. 【整理】EFI/UEFI BIOS 入门 : All For Beginners
  18. 存储圈装逼必上TOP 10网站
  19. java输出abba_面试-字符串abba匹配问题-java8解决方案
  20. java page 分页_java Page分页显示

热门文章

  1. grpc-gateway 返回值中默认值为什么不显示?
  2. 房企高周转之殇:恶果显现 减配、质量问题、虚假销售
  3. EEPROM中存储数据的字节序
  4. phpstorm 插件
  5. ucOS-II基于ARM920T的OSIntCtxSw实现分析
  6. 微信公众号商城怎么搭建和如何运营
  7. Lcov生成的Info文件格式分析
  8. mysql导入微信小程序云开发_微信小程序-云开发数据库上传json文件
  9. Android通讯录模糊匹配搜索实现(号码、首字母、简拼、全拼)
  10. [!] Error installing PromiseKit