監聽手機撥打電話的狀態 private PhoneStateListener getPhoneStateListener() -开发者知识库
1、監聽手機的狀態是經常要用到的,當正在錄音或者正在播放音樂的時候想要監聽手機是否處於撥打電話的情況,這時候可以采取下面的辦法。
變量的聲明:
private TelephonyManager mTelephonyManager;
private PhoneStateListener mPhoneStateListener;
在onCreate()方法中先聲明:
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mPhoneStateListener = getPhoneStateListener();
在onResume()方法中程序運行過程中監聽手機狀態
protected void onResume() {
super.onResume();
// While we're in the foreground, listen for phone state changes.
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
在onPause()方法中監聽程序暫停時候的手機狀態
// Stop listening for phone state changes.
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
mSampleInterrupted = mRecorder.state() == Recorder.RECORDING_STATE;
注冊監聽
private PhoneStateListener getPhoneStateListener() {
PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String ignored) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
if ((sOldCallState == TelephonyManager.CALL_STATE_OFFHOOK)
&& !(mAudioSourceType == MediaRecorder.AudioSource.MIC)){
mRecorder.stop();
showStoppedNotification();
mAudioSourceType = MediaRecorder.AudioSource.MIC;
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
sOldCallState = TelephonyManager.CALL_STATE_OFFHOOK;
break;
default:
// The control should not come here
Log.e(TAG,"Unknown call state");
break;
}
}
};
return phoneStateListener;
}
最佳答案: