1. 程式人生 > >Android中如何監聽手機電話狀態

Android中如何監聽手機電話狀態

問題描述:當應用中需要對來電這一狀態進行處理時(例如來電時顯示來電話號碼歸屬地等),就需要對電話狀態進行監聽。

解決步驟: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();
	}              

                      這樣,一旦服務被開啟,就會一直監聽來電的狀態。