Android中監聽來電和去電,這種功能的實現也許會在一些項目中經常實現,尤其一些防盜軟件,這裡為大家分享一下很不錯的Android監聽來電和去電的源碼:
要監聽android打電話和接電話,只需下面2步驟
1.第一步,寫一個Receiver繼承自BroadcastReceiver
- import android.app.Service;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.telephony.TelephonyManager;
- import android.util.Log;
-
- public class PhoneStateBroadCastReceiver extends BroadcastReceiver
- {
- private static final String TAG = "PhoneStateBroadCastReceiver";
-
- private static boolean mIncomingFlag = false;
- private static String mIncomingNumber = null;
-
- @Override
- public void onReceive(Context context, Intent intent)
- {
- // 如果是撥打電話
- if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL))
- {
- mIncomingFlag = false;
- String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
- Log.i(TAG, "call OUT:" + phoneNumber);
- } else
- {
- // 如果是來電
- TelephonyManager tManager =
- (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
- switch (tManager.getCallState())
- {
- case TelephonyManager.CALL_STATE_RINGING:
- mIncomingNumber = intent.getStringExtra("incoming_number");
- Log.i(TAG, "RINGING :" + mIncomingNumber);
- break;
- case TelephonyManager.CALL_STATE_OFFHOOK:
- if (mIncomingFlag)
- {
- Log.i(TAG, "incoming ACCEPT :" + mIncomingNumber);
- }
- break;
- case TelephonyManager.CALL_STATE_IDLE:
- if (mIncomingFlag)
- {
- Log.i(TAG, "incoming IDLE");
- }
- break;
- }
- }
- }
-
- }
第二步:在AndroidManifest.xml,配置寫好的Receiver,並攔截相應的BroadCastAction,
另外注意加上相應的權限:
- <receiver android:name=".broadcase.PhoneStateBroadCastReceiver">
- <intent-filter>
- <action android:name="android.intent.action.PHONE_STATE"/>
- <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
- </intent-filter>
- </receiver>
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />