注意:android2.3版本不支持下面的自动接听方法。(会抛异常:java.lang.SecurityException: Neither user xxxxx nor current process has android.permission.MODIFY_PHONE_STATE.)

第一步:准备应用环境需要的系统包和aidl文件。

(1)在应用中创建包:android.telephony

将android系统框架下的\framework\telephony\java\android\telephony目录中的NeighboringCellInfo.aidl文件复制到上面创建的包(android.telephony )中;

(2)在应用中创建包:com.android.internal.telephony

将android系统框架下的\framework\telephony\java\com\android\internal\telephony目录中的ITelephony.aidl文件复制到上面创建的包(com.android.internal.telephony )中;

第二步:创建一个获取ITelephony的方法

PhoneUtils.java

Java代码 

package com.zhouzijing.android.demo;
import java.lang.reflect.Method;
import com.android.internal.telephony.ITelephony;
import android.telephony.TelephonyManager;

public class PhoneUtils {
  /**
  * 根据传入的TelephonyManager来取得系统的ITelephony实例.
  * @param telephony
  * @return 系统的ITelephony实例
  * @throws Exception
  */
  public static ITelephony getITelephony(TelephonyManager telephony) throws Exception {
    Method getITelephonyMethod = telephony.getClass().getDeclaredMethod("getITelephony");
    getITelephonyMethod.setAccessible(true);//私有化函数也能使用
    return (ITelephony)getITelephonyMethod.invoke(telephony);
  }
}

第三步:创建电话广播拦截器

MyPhoneBroadcastReceiver.java

Java代码 
  1. package com.zhouzijing.android.demo;
  2. import com.android.internal.telephony.ITelephony;
  3. import android.content.BroadcastReceiver;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.telephony.TelephonyManager;
  7. import android.util.Log;
  8. public class MyPhoneBroadcastReceiver extends BroadcastReceiver {
  9. private final static String TAG = MyPhone.TAG;
  10. @Override
  11. public void onReceive(Context context, Intent intent) {
  12. String action = intent.getAction();
  13. Log.i(TAG, "[Broadcast]"+action);
  14. //呼入电话
  15. if(action.equals(MyPhone.B_PHONE_STATE)){
  16. Log.i(TAG, "[Broadcast]PHONE_STATE");
  17. doReceivePhone(context,intent);
  18. }
  19. }
  20. /**
  21. * 处理电话广播.
  22. * @param context
  23. * @param intent
  24. */
  25. public void doReceivePhone(Context context, Intent intent) {
  26. String phoneNumber = intent.getStringExtra(
  27. TelephonyManager.EXTRA_INCOMING_NUMBER);
  28. TelephonyManager telephony = (TelephonyManager)context.getSystemService(
  29. Context.TELEPHONY_SERVICE);
  30. int state = telephony.getCallState();
  31. switch(state){
  32. case TelephonyManager.CALL_STATE_RINGING:
  33. Log.i(TAG, "[Broadcast]等待接电话="+phoneNumber);
  34. try {
  35. ITelephony iTelephony = PhoneUtils.getITelephony(telephony);
  36. iTelephony.answerRingingCall();//自动接通电话
  37. //iTelephony.endCall();//自动挂断电话
  38. } catch (Exception e) {
  39. Log.e(TAG, "[Broadcast]Exception="+e.getMessage(), e);
  40. }
  41. break;
  42. case TelephonyManager.CALL_STATE_IDLE:
  43. Log.i(TAG, "[Broadcast]电话挂断="+phoneNumber);
  44. break;
  45. case TelephonyManager.CALL_STATE_OFFHOOK:
  46. Log.i(TAG, "[Broadcast]通话中="+phoneNumber);
  47. break;
  48. }
  49. }
  50. }

第四部:注册电话广播拦截器

MyPhone.java

Java代码
  1. package com.zhouzijing.android.demo;
  2. import android.app.Activity;
  3. import android.content.IntentFilter;
  4. import android.os.Bundle;
  5. import android.telephony.TelephonyManager;
  6. import android.util.Log;
  7. import android.view.View;
  8. public class MyPhone extends Activity {
  9. public final static String TAG = "MyPhone";
  10. public final static String B_PHONE_STATE = TelephonyManager.ACTION_PHONE_STATE_CHANGED;
  11. private MyPhoneBroadcastReceiver mBroadcastReceiver;
  12. @Override
  13. public void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.my_phone);
  16. }
  17. //按钮1-注册广播
  18. public void registerThis(View v) {
  19. Log.i(TAG, "registerThis");
  20. mBroadcastReceiver = new MyPhoneBroadcastReceiver();
  21. IntentFilter intentFilter = new IntentFilter();
  22. intentFilter.addAction(B_PHONE_STATE);
  23. intentFilter.setPriority(Integer.MAX_VALUE);
  24. registerReceiver(mBroadcastReceiver, intentFilter);
  25. }
  26. //按钮2-撤销广播
  27. public void unregisterThis(View v) {
  28. Log.i(TAG, "unregisterThis");
  29. unregisterReceiver(mBroadcastReceiver);
  30. }
  31. }

第5步:在AndroidManifest.xml配置权限

Xml代码 
<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"/>  

其中:Java代码

  1. iTelephony.answerRingingCall();//自动接通电话

必须有权限 android.permission.MODIFY_PHONE_STATE

Java代码 
  1. iTelephony.endCall();//自动挂断电话

必须有权限 android.permission.CALL_PHONE

android 来电自动接听和自动挂断相关推荐

  1. Android 自动接听电话和挂断

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

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

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

  3. android 自动挂断,[转]android 来电自动接听和自动挂断

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

  4. Android(AIDL)自动重复拨号及挂断/接听电话

    Android默认没有提供挂断/接听电话的api,需要伪装com/android/internal/telephony/ITelephony.aidl的接口来欺骗系统.而自动重复拨号可以通过(Broa ...

  5. Android 监听通话状态(挂断 监听 来电)实现自动外呼 按顺序拨出电话 间隔5秒

    最近项目也是添加一个小功能 监听通话状态实现一个自动外呼的功能 我在这里简单的实现了一下转了几天的博客可各大网站找出了一个最简单也好理解的一个方法(至今为止) 其实就用到了我们Android源生自带的 ...

  6. Android ITelephony EndCall Remove 各版本挂断、拦截电话方法

    本文首发地址:https://blog.csdn.net/CSqingchen/article/details/121426660 最新更新地址:https://gitee.com/chenjim/c ...

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

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

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

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

  9. android 自动拨打电话和挂断电话(反射和intent方式)

    欢迎来到博主的技术分享博客 今天分享的技术主要内容是自动拨打电话和挂断电话.自动拨打电话分为两种,一种是通过反射ITelephony这个类直接调用call方法,一种是通过intent方法.而挂断电话则 ...

  10. Android 来电秀总结

    前言 效果图 TODO 参考文章 实现思想 申请权限 静态权限 动态权限 监听电话 BroadcastReceiver +悬浮窗显示实现 InCallService + Activity实现 最后 该 ...

最新文章

  1. 深入理解CSS计数器
  2. Pytorch自定义数据集
  3. elasticsearch Insert 插入数据和delete 删除数据(Java)
  4. 对查询出来的结果进行筛选(having)
  5. 朴素贝叶斯分类器 文本分类_构建灾难响应的文本分类器
  6. Python 第三方模块之 numpy.random
  7. 7.请解释泛型list集合的长度为什么动态的?_Java面试题集合篇一
  8. mysql 跳过一个事物_MySQL基于GTID的数据恢复
  9. pytorch---模型保存于加载(4)在一个文件中保存多个模型
  10. JVM-深入虚拟机字节码执行引擎
  11. 计算机文字录入在线打字,汉字输入方法-在线打字吧-在线拼音五笔打字练习软件,中文录入打字软件...
  12. C语言-数组的趣味应用-筛法求素数
  13. ArduinoUNO实战-第五章-有源蜂鸣器实验
  14. 医学方面的创业计划书_医学生创业计划书怎么写
  15. 离职后重回老东家?你需要明白这些事情
  16. D3.js in action 笔记
  17. Online Multiple Object Tracking with Cross-Task Synerg
  18. 2018最新精选的Go框架,库和软件的精选列表 二 https://awesome-go.com/
  19. hypermill后处理构造器安装_NX后处理直白易操作教程
  20. 2022年样题五全国职业院校网络系统管理-网络部分

热门文章

  1. narwal无法连接机器人_知了连接型智能营销机器人——重新定义AI客服
  2. head 标签里有什么?
  3. web测试实践作业进度报告三
  4. CentOS7搭建本地yum源之http服务
  5. intellij中编译报错: The packaging for this project did not assign a file to the build artifact
  6. OneProxy中间件生产使用经验视频分享
  7. redhat5.4上安装oracle9i
  8. mysql group by rowid_MySQL里面的group by问题浅析
  9. 白鹭引擎拉伸高度_摩托车界厚道王!129cc单缸风冷引擎,座高740mm+数字盘,6400起...
  10. java api 第一个类是_java_8_第一个API