Android 电话自动接听和挂断详解
1、通过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<TelephonyManager> 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;
}
}
};
aidl下载地址:http://download.csdn.net/detail/ab6326795/7993671
以上方法适用于版本2.3以前的,2.3以上的就不能用了
2、通过广播通知系统进行接听和挂断
因为Android2.3以上增加了对permissionandroid.permission.MODIFY_PHONE_STATE的限制,2.3之前的通过反射机制调用ITelephone的能力的做法已经不适用。
2.3上实现方式:
public synchronized void answerRingingCall() {
查询系统PhoneAPP应用(PhoneGlobals.java)实现了对耳机插入、多媒体按键等通知的接受和处理。其中未发现有特殊的地方,个人认为,如果系统接收到此广播应该可以进行接听或挂断操作。
// 2.3以上执行以下代码实现自动接听Intent mintent = new Intent(Intent.ACTION_MEDIA_BUTTON);//按下音量KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK);mintent.putExtra("android.intent.extra.KEY_EVENT", keyEvent);// 通话权限 允许程序拨打电话, 替换系统的拨号器界面mContext.sendOrderedBroadcast(mintent,"android.permission.CALL_PRIVILEGED");mintent = new Intent(Intent.ACTION_MEDIA_BUTTON);keyEvent = new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_HEADSETHOOK);mintent.putExtra("android.intent.extra.KEY_EVENT", keyEvent);mContext.sendOrderedBroadcast(mintent,"android.permission.CALL_PRIVILEGED");
两个都需要权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /><!-- 拨打电话的权限 --><uses-permission android:name="android.permission.CALL_PHONE"/>
综合两种方法就可以做出电话自动接听和挂断的APP了
Android 电话自动接听和挂断详解相关推荐
- Android通过程序接听或者挂断电话
转载注明出处:简书-十个雨点 这篇文章教你如何帮助用户自动接听或者挂断来电.当然并不是我原创的代码,我只不过是把stackoverflow上的一些代码整合了一下,做个代码的二传手. 源码 Accept ...
- 自动接听或者挂断来电
如何帮助用户自动接听或者挂断来电. 源码 GitHub源码中用了MVP的模式,只是最简单的使用,如果不熟悉的话刚好可以学学,逻辑部分在IncomingPresenter类中. 以下是逻辑图 首先监听来 ...
- android自动接听和挂断电话
实现android自动接听和挂断电话功能.代码如下: 添加权限 <uses-permission android:name="android.permission.CALL_PHONE ...
- 实现电话自动拨打、挂断
声明:该软件只是用以学习android系统的相关知识,任何参考该博客文章的其他行为均与该博客文章的作者无关. 软件要实现的大致功能是:通过输入框获取需要拨打的电话号码,电泳android打电话功能进行 ...
- android 挂断 电话 反射,android 接听和挂断实现方式
注意:android2.3版本及以上不支持下面的自动接听方法. (会抛异常:java.lang.SecurityException: Neither user xxxxx nor current pr ...
- android 接听和挂断实现方式
转载▼ 标签: android 接听 挂断 it 分类: android应用技巧 参考:android 来电接听和挂断 支持目前所有版本 注意:android2.3版本及以上不支持下面的自动接听方法. ...
- android 自动挂断,android 来电自动接听和自动挂断(2.3以上)
转自http://stephen830.iteye.com/blog/1181786java android 来电自动接听和自动挂断android 注意:android2.3版本不支持下面的自动接听方 ...
- 蓝牙电话协议HFP(Hands-Free Profile) 接听来电/挂断来电(HFP Accept/Reject incoming call)
零. 概述 本文章主要讲下电话免提协议HFP(Hands-Free Profile)接听来电/挂断来电(HFP Accept/Reject incoming call)以及在挂断电话(Terminat ...
- Xamarin.Android实现自动拨打及挂断电话的功能
目录 1.说明 2.具体实现 2.1 效果 2.2 原理说明 2.3 具体代码实现 2.3.1 layout 2.3.3 广播接收器 2.3.3 拨打电话的Activity 2.3.4 主界面Acti ...
最新文章
- centos vim配置高亮语法和格式化粘贴
- css背景图宽度只适应,高度不变
- 【工作笔记】没有界面程序调用ActiveX控件
- PIL 学习笔记(1)
- java位移运算符2 转
- Hadoop 实践(一) 环境搭建
- micropython教程modbus_基于S7-300400 CPU集成PN接口的Modbus TCP在TIA Portal的使用入门教程...
- 女生中专学计算机,女生读中专哪个专业好
- python字典弱引用_python 自身遍历及弱引用的简单示例
- [Svn不提交Classes文件夹下的文件][SVN不交付Classes解决方案]
- android crash分析工具,Android Crash之Native Crash分析
- 让DB2跑得更快——DB2内部解析与性能优化
- 计算机网络技术基础知识
- Hibernate完全自学手册
- 【Deepin Debian 系统安装RPD远程桌面工具Remmina】
- MCS-51单片机的硬件结构
- python的PIL库
- 12.计算机网络---iptables防火墙管理工具
- C++一本通题库1015
- 草根互联网经理掀起的中国性解放运动
热门文章
- android 解决viewpager+多个fragment+recyclerview,viewpager展示内容高度不自适应出现多余空白问题
- 关于java构造函数 的错误 there is no default constructor available in
- html前端课讲项目特效,前端特效demo | 值得收藏的6个 HTML5 Canvas 实用案例
- Flink 异常 - 3.java.lang.InternalError: Malformed class name
- Inno Setup 精灵显示插件 InnoFairy (V2.0 版本)
- 【笔记】《Java编程思想(第四版)》第9章-接口
- 毕业设计 开源物联网系统设计(源码+论文)
- Android S动态广播注册流程(广播1)
- 【MySQL】视图实训
- Freemark 常用代码总结