首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2012-08-13 
android 来电自动接听和自动挂断android 来电自动接听和自动挂断??注意:android2.3版本不支持下面的自动接

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

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

?

?

?

?

?

?

?

热点排行