Android中如何監聽手機電話狀態
阿新 • • 發佈:2019-01-03
問題描述:當應用中需要對來電這一狀態進行處理時(例如來電時顯示來電話號碼歸屬地等),就需要對電話狀態進行監聽。
解決步驟:1.對電話狀態的監聽最好是放在服務中,因為有一種服務的啟動方式可以不依賴於activity的生命週期,即使activity被銷燬,服務依然在後臺執行。因此建立一個Myservice extends Service;
2.建立一個類MyPhoneStateListener extends PhoneStateListener,手動重寫電話改變會觸發的方法,程式碼如下:
public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_IDLE: //空閒狀態 //實現自己的業務邏輯 break; case TelephonyManager.CALL_STATE_OFFHOOK: //摘機狀態,至少有個電話活動,該活動或是撥打或是通話
//實現自己的業務邏輯break;case TelephonyManager.CALL_STATE_RINGING://響鈴狀態
//實現自己的業務邏輯
break;default:break;}super.onCallStateChanged(state, incomingNumber);}
3.重寫Service中的onCreate()方法和onDestroy()方法,程式碼如下:
當服務銷燬的時候,取消電話狀態的監聽。@Override public void onCreate() { // 1.獲取電話管理者物件 mTM = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); mMyPhoneStateListener = new MyPhoneStateListener(); mTM.listen(mMyPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); super.onCreate(); }
@Override public void onDestroy() { // 取消電話狀態的監聽 if (mTM != null && mMyPhoneStateListener != null) { mTM.listen(mMyPhoneStateListener, PhoneStateListener.LISTEN_NONE); } super.onDestroy(); }
這樣,一旦服務被開啟,就會一直監聽來電的狀態。