1.第一步,寫一個Receiver繼承自BroadcastReceiver
-
-
public class PhoneStatReceiver extends BroadcastReceiver{
-
-
private static final String TAG = "PhoneStatReceiver";
-
-
// private static MyPhoneStateListener phoneListener = new MyPhoneStateListener();
-
-
private static boolean incomingFlag = false;
-
-
private static String incoming_number = null;
-
-
@Override
-
public void onReceive(Context context, Intent intent) {
-
//如果是撥打電話
-
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
-
incomingFlag = false;
-
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
-
Log.i(TAG, "call OUT:"+phoneNumber);
-
}else{
-
//如果是來電
-
TelephonyManager tm =
-
(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
-
-
switch (tm.getCallState()) {
-
case TelephonyManager.CALL_STATE_RINGING:
-
incomingFlag = true;//標識當前是來電
-
incoming_number = intent.getStringExtra("incoming_number");
-
Log.i(TAG, "RINGING :"+ incoming_number);
-
break;
-
case TelephonyManager.CALL_STATE_OFFHOOK:
-
if(incomingFlag){
-
Log.i(TAG, "incoming ACCEPT :"+ incoming_number);
-
}
-
break;
-
-
case TelephonyManager.CALL_STATE_IDLE:
-
if(incomingFlag){
-
Log.i(TAG, "incoming IDLE");
-
}
-
break;
-
}
-
}
-
}
-
}
另外注意加上相應的權限。
-
-
<receiver android:name=".filter.PhoneStatReceiver">
-
<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>
- <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
對於來電狀態的變化,用戶可以在上面的例子代碼中,加入自己想要實現的邏輯。 來電分三種狀態: CALL_STATE_RINGING:來電響鈴 CALL_STATE_OFFHOOK:摘機 CALL_STATE_IDLE:掛機 摘自:http://www.eoeandroid.com/thread-8994-1-1.html |