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. Android(安卓)ROM的创建和烧录
  2. Android开发小知识点集锦
  3. Android(安卓)模板编写
  4. Android发送短信方法实例详解
  5. 怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格
  6. 【contacts】Phonebook电话本
  7. android 打电话
  8. android实现拨打电话
  9. android之创建快捷方式

随机推荐

  1. Android中蓝牙设备搜索
  2. Android批量插入数据到SQLite数据库
  3. android各种返回写法
  4. Android Drawable和Bitmap图片之间转换
  5. Android 仿订单出票效果 (附DEMO)
  6. Say Hello to Android!!!
  7. osg for android 学习之七:绘制基本的对
  8. android实现发送短信并保存到数据库,同时
  9. Android HTTP GET 小文件下载
  10. i.MX6 安装交叉编译器