android 来电自动接听和自动挂断

注意: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

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

package com.zhouzijing.android.demo;import com.android.internal.telephony.ITelephony;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.telephony.TelephonyManager;import android.util.Log;public class MyPhoneBroadcastReceiver extends BroadcastReceiver {private final static String TAG = MyPhone.TAG;@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();Log.i(TAG, "[Broadcast]"+action);//呼入电话if(action.equals(MyPhone.B_PHONE_STATE)){Log.i(TAG, "[Broadcast]PHONE_STATE");doReceivePhone(context,intent);}}/** * 处理电话广播. * @param context * @param intent */public void doReceivePhone(Context context, Intent intent) {String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);int state = telephony.getCallState();switch(state){case TelephonyManager.CALL_STATE_RINGING:Log.i(TAG, "[Broadcast]等待接电话="+phoneNumber);try {ITelephony iTelephony = PhoneUtils.getITelephony(telephony);iTelephony.answerRingingCall();//自动接通电话//iTelephony.endCall();//自动挂断电话} catch (Exception e) {Log.e(TAG, "[Broadcast]Exception="+e.getMessage(), e);}break;case TelephonyManager.CALL_STATE_IDLE:Log.i(TAG, "[Broadcast]电话挂断="+phoneNumber);break;case TelephonyManager.CALL_STATE_OFFHOOK:Log.i(TAG, "[Broadcast]通话中="+phoneNumber);break;}}}

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

MyPhone.java

package com.zhouzijing.android.demo;import android.app.Activity;import android.content.IntentFilter;import android.os.Bundle;import android.telephony.TelephonyManager;import android.util.Log;import android.view.View;public class MyPhone extends Activity {public final static String TAG = "MyPhone";public final static String B_PHONE_STATE = TelephonyManager.ACTION_PHONE_STATE_CHANGED;private MyPhoneBroadcastReceiver mBroadcastReceiver;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.my_phone);}//按钮1-注册广播public void registerThis(View v) {Log.i(TAG, "registerThis");mBroadcastReceiver = new MyPhoneBroadcastReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(B_PHONE_STATE);intentFilter.setPriority(Integer.MAX_VALUE);registerReceiver(mBroadcastReceiver, intentFilter);}//按钮2-撤销广播public void unregisterThis(View v) {Log.i(TAG, "unregisterThis");unregisterReceiver(mBroadcastReceiver);}}

第5步:在AndroidManifest.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"/>

其中:

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

必须有权限 android.permission.MODIFY_PHONE_STATE

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

必须有权限 android.permission.CALL_PHONE

更多相关文章

  1. Lua学习 2) —— Android与Lua互调
  2. Android(安卓)读取doc文件
  3. Android之菜单总结
  4. Android使用Retrofit进行网络请求
  5. Android官方入门文档[1]创建一个Android项目
  6. android 创建桌面快捷方式 、插件
  7. android打电话发短信
  8. android 拨打紧急号码,通话时开启免提功能实现
  9. AIR Native Extension的使用(Android)一 : 打包ane

随机推荐

  1. js字符串转换成xml并使用
  2. XML数据读取方式性能比较(二)
  3. 让Asp与XML交互
  4. XML 实体引用、注释、命名规则
  5. XML数据读取方式性能比较(一)
  6. 给XML文档添加新 ”records”
  7. XML 增、删、改
  8. vbs类天生xml文件
  9. XML指南——XML 确认
  10. Xml SelectNodes 与 XPath