android来电处理

来源:互联网 发布:网络用语whf什么意思 编辑:程序博客网 时间:2024/05/16 11:50

部分转自:http://blog.csdn.net/GEOLO/article/details/6090264

          http://blog.csdn.net/GEOLO/article/details/6090303

1. 在src下新建一个包:com.android.internal.telephony(和ITelephony.aidl 中 package 声明的包名一样);

2. 然后从系统源码中把ITelephony.aidl文件拷贝到 com.android.internal.telephony包下。(也可以先新建一个ITelephony.aidl, 然后再把内容拷贝进去(ITelephony.aidl文件内容可以在http://www.netmite.com/android/mydroid/1.5/frameworks/base/telephony/java/com/android/internal/telephony/ITelephony.aidl 找到,这个方法适合没有SDK源码文件的开发者));
3. 在src下新建一个包:android.telephony, 然后新建一个NeighboringCellInfo.aidl,其内容为:
package android.telephony;parcelable NeighboringCellInfo;

4.接收来电状态。

package com.geolo.pcp.android;import java.lang.reflect.Method;import com.android.internal.telephony.ITelephony;import android.app.Activity;import android.content.Context;import android.media.AudioManager;import android.os.Bundle;import android.telephony.PhoneStateListener;import android.telephony.ServiceState;import android.telephony.SignalStrength;import android.telephony.TelephonyManager;import android.util.Log; public class PhoneCallActivity extends Activity{private PhoneCallListener mPhoneCallListener; private TelephonyManager mTelephonyManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mPhoneCallListener = new PhoneCallListener();mTelephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);mTelephonyManager.listen(mPhoneCallListener, PhoneCallListener.LISTEN_CALL_STATE);}public class PhoneCallListener extends PhoneStateListener{@Overridepublic void onCallStateChanged(int state, String incomingNumber) {switch (state)  { case TelephonyManager.CALL_STATE_IDLE: break; case TelephonyManager.CALL_STATE_OFFHOOK: //CALL_STATE_OFFHOOK; break; case TelephonyManager.CALL_STATE_RINGING: break; default: break; } super.onCallStateChanged(state, incomingNumber);}@Overridepublic void onDataConnectionStateChanged(int state) {Log.v(this.getClass().getName(), "onDataConnectionStateChanged-state: " + state);super.onDataConnectionStateChanged(state);}@Overridepublic void onDataConnectionStateChanged(int state, int networkType) {Log.v(this.getClass().getName(), "onDataConnectionStateChanged-state: " + state);Log.v(this.getClass().getName(), "onDataConnectionStateChanged-networkType: " + networkType);super.onDataConnectionStateChanged(state, networkType);}@Overridepublic void onServiceStateChanged(ServiceState serviceState) {Log.v(this.getClass().getName(), "onServiceStateChanged-ServiceState: " + serviceState);super.onServiceStateChanged(serviceState);}@Overridepublic void onSignalStrengthChanged(int asu) {Log.v(this.getClass().getName(), "onSignalStrengthChanged-asu: " + asu);super.onSignalStrengthChanged(asu);}@Overridepublic void onSignalStrengthsChanged(SignalStrength signalStrength) {Log.v(this.getClass().getName(), "onSignalStrengthsChanged-signalStrength: " + signalStrength);super.onSignalStrengthsChanged(signalStrength);}} }

5. 自动挂断

private void endCall()    {  Log.d(TAG, "end call ");Class<TelephonyManager> c = TelephonyManager.class;try {Method getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[]) null);getITelephonyMethod.setAccessible(true);ITelephony iTelephony = null;iTelephony = (ITelephony) getITelephonyMethod.invoke(mTelephonyManager, (Object[]) null);iTelephony.endCall();                         // 去掉通知栏通知iTelephony.cancelMissedCallsNotification();} catch (Exception e) {Log.e(TAG, "Fail to end call.", e);}    } 


6. 自动接听(以前博客中整理的)

见:http://blog.csdn.net/wonengxing/article/details/28423427

7. 删除历史记录

private boolean deleteCallHistory(String phoneNumber){Log.i(TAG, "cancel notification");Class<TelephonyManager> c = TelephonyManager.class;try {Method getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[]) null);getITelephonyMethod.setAccessible(true);ITelephony iTelephony = null;iTelephony = (ITelephony) getITelephonyMethod.invoke(mTelephonyManager, (Object[]) null);iTelephony.cancelMissedCallsNotification();} catch (Exception e) {Log.e(TAG, "Fail to cancel missed call notification", e);}Log.i(TAG, "deleteCallHistory");ContentResolver resolver = getContentResolver();Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, new String[]{"_id"}, "number=?", new String[]{phoneNumber}, "_id desc limit 1");if(cursor.moveToFirst()){Log.i(TAG, "get one entry");int id = cursor.getInt(0);resolver.delete(CallLog.Calls.CONTENT_URI, "_id=?", new String[]{id + ""});cursor.close();return true;}cursor.close();return false;}

8. 将已接电话变成未接电话,没有在通知栏通知

private boolean updateCallHistorytoUnseen(String phoneNumber){Log.d(TAG, "updateCallHistorytoUnseen");ContentResolver resolver = getContentResolver();Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, new String[]{"_id"}, "number=? and type=1", new String[]{phoneNumber}, "_id desc limit 1");if(cursor.moveToFirst()){Log.d(TAG, "get one entry");int id = cursor.getInt(0);ContentValues values = new ContentValues();values.put(CallLog.Calls.TYPE, CallLog.Calls.MISSED_TYPE);values.put(CallLog.Calls.NEW, "1");resolver.update(CallLog.Calls.CONTENT_URI, values, "_id=?", new String[]{id + ""});cursor.close();return true;}cursor.close();return false;}

有关电话的其他操作:

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=166448


0 0
原创粉丝点击