無論是打電話還是來電,系統廣播是會發送相應的訊息的,我們可以監聽廣播擷取手機電話狀態。
首先在manifest檔案中配置自己的BroadcastReceiver,和聲明許可權。
<receiver android:name=".filter.PhoneStatReceiver"><br /> <intent-filter><br /> <action android:name="android.intent.action.PHONE_STATE"/><br /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /><br /> </intent-filter><br /> </receiver></p><p> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><br /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
在自己的BroadcastReceiver中做相應的處理
<br />import android.app.Service;<br />import android.content.BroadcastReceiver;<br />import android.content.Context;<br />import android.content.Intent;<br />import android.telephony.TelephonyManager;<br />import android.util.Log;</p><p>public class PhoneStatReceiver extends BroadcastReceiver{</p><p> private static final String TAG = "PhoneStatReceiver";</p><p> private static boolean incomingFlag = false;</p><p> private static String incoming_number = null;</p><p> @Override<br /> public void onReceive(Context context, Intent intent) {<br /> //如果是撥打到電話<br /> if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){<br /> incomingFlag = false;<br /> String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);<br /> Log.i(TAG, "call OUT:"+phoneNumber);<br /> }else{<br /> //如果是來電<br /> TelephonyManager tm =<br /> (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE); </p><p> switch (tm.getCallState()) {<br /> case TelephonyManager.CALL_STATE_RINGING:<br /> incomingFlag = true;//標識當前是來電<br /> incoming_number = intent.getStringExtra("incoming_number");<br /> Log.i(TAG, "RINGING :"+ incoming_number);<br /> break;<br /> case TelephonyManager.CALL_STATE_OFFHOOK: //存在至少有一個呼叫撥號,活躍,或 //保留,並沒有來電響鈴或等待<br /> if(incomingFlag){<br /> Log.i(TAG, "incoming ACCEPT :"+ incoming_number);<br /> }<br /> break;</p><p> case TelephonyManager.CALL_STATE_IDLE: //閑置狀態<br /> if(incomingFlag){<br /> Log.i(TAG, "incoming IDLE");<br /> }<br /> break;<br /> }<br /> }<br /> }<br />}