/**
* 监听android.intent.action.PHONE_STATE广播时,API21以上会收到两次回调,这两次的state(idle、ringing、offhook)是一样的,使用label判断保证需要的方法仅执行一次;
* <receiver android:name=".PhoneStateBroadcastReceiver">
* <intent-filter>
* <action android:name="android.intent.action.PHONE_STATE"/>
* </intent-filter>
* </receiver>
*/
public class PhoneStateBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "PhoneStateBroadcastReceiver";
private static String label = "";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (("android.intent.action.PHONE_STATE").equals(action)) {
/**
* 获取到当前监听到的来电/去电状态:
* public static final String EXTRA_STATE_IDLE = PhoneConstants.State.IDLE.toString();
* public static final String EXTRA_STATE_RINGING = PhoneConstants.State.RINGING.toString();
* public static final String EXTRA_STATE_OFFHOOK = PhoneConstants.State.OFFHOOK.toString();
*/
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (!TextUtils.isEmpty(state) &&
!label.equals(state)) {
label = state;
//1:可以在这里根据不同的state处理您的逻辑
//2:也可以在此注册TelephonyManager监听,继承PhoneStateListener去获取来电、去电的状态
// TelephonyManager tm = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
// tm.listen(PhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
}
}