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 电话自动接听和挂断详解相关推荐

  1. Android通过程序接听或者挂断电话

    转载注明出处:简书-十个雨点 这篇文章教你如何帮助用户自动接听或者挂断来电.当然并不是我原创的代码,我只不过是把stackoverflow上的一些代码整合了一下,做个代码的二传手. 源码 Accept ...

  2. 自动接听或者挂断来电

    如何帮助用户自动接听或者挂断来电. 源码 GitHub源码中用了MVP的模式,只是最简单的使用,如果不熟悉的话刚好可以学学,逻辑部分在IncomingPresenter类中. 以下是逻辑图 首先监听来 ...

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

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

  4. 实现电话自动拨打、挂断

    声明:该软件只是用以学习android系统的相关知识,任何参考该博客文章的其他行为均与该博客文章的作者无关. 软件要实现的大致功能是:通过输入框获取需要拨打的电话号码,电泳android打电话功能进行 ...

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

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

  6. android 接听和挂断实现方式

    转载▼ 标签: android 接听 挂断 it 分类: android应用技巧 参考:android 来电接听和挂断 支持目前所有版本 注意:android2.3版本及以上不支持下面的自动接听方法. ...

  7. android 自动挂断,android 来电自动接听和自动挂断(2.3以上)

    转自http://stephen830.iteye.com/blog/1181786java android 来电自动接听和自动挂断android 注意:android2.3版本不支持下面的自动接听方 ...

  8. 蓝牙电话协议HFP(Hands-Free Profile) 接听来电/挂断来电(HFP Accept/Reject incoming call)

    零. 概述 本文章主要讲下电话免提协议HFP(Hands-Free Profile)接听来电/挂断来电(HFP Accept/Reject incoming call)以及在挂断电话(Terminat ...

  9. 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 ...

最新文章

  1. centos vim配置高亮语法和格式化粘贴
  2. css背景图宽度只适应,高度不变
  3. 【工作笔记】没有界面程序调用ActiveX控件
  4. PIL 学习笔记(1)
  5. java位移运算符2 转
  6. Hadoop 实践(一) 环境搭建
  7. micropython教程modbus_基于S7-300400 CPU集成PN接口的Modbus TCP在TIA Portal的使用入门教程...
  8. 女生中专学计算机,女生读中专哪个专业好
  9. python字典弱引用_python 自身遍历及弱引用的简单示例
  10. [Svn不提交Classes文件夹下的文件][SVN不交付Classes解决方案]
  11. android crash分析工具,Android Crash之Native Crash分析
  12. 让DB2跑得更快——DB2内部解析与性能优化
  13. 计算机网络技术基础知识
  14. Hibernate完全自学手册
  15. 【Deepin Debian 系统安装RPD远程桌面工具Remmina】
  16. MCS-51单片机的硬件结构
  17. python的PIL库
  18. 12.计算机网络---iptables防火墙管理工具
  19. C++一本通题库1015
  20. 草根互联网经理掀起的中国性解放运动

热门文章

  1. android 解决viewpager+多个fragment+recyclerview,viewpager展示内容高度不自适应出现多余空白问题
  2. 关于java构造函数 的错误 there is no default constructor available in
  3. html前端课讲项目特效,前端特效demo | 值得收藏的6个 HTML5 Canvas 实用案例
  4. Flink 异常 - 3.java.lang.InternalError: Malformed class name
  5. Inno Setup 精灵显示插件 InnoFairy (V2.0 版本)
  6. 【笔记】《Java编程思想(第四版)》第9章-接口
  7. 毕业设计 开源物联网系统设计(源码+论文)
  8. Android S动态广播注册流程(广播1)
  9. 【MySQL】视图实训
  10. Freemark 常用代码总结