2012-02-23 118 views
0

我需要一個應用程序範圍的偵聽器來確定服務狀態在電話上何時更改。我已經通過在線的每一個例子,複製了行,修改了清單,並且我無法獲得任何工作。無法使PhoneStateListener正常工作。我見過這些示例

手機狀態監聽器是否已處於活動狀態?我可以有一些簡單的老班來聽電話狀態變化嗎?

這很令人沮喪。

在我的課堂我有...

 private class ServiceReceiver extends BroadcastReceiver{ 

     @Override 
     public void onReceive(android.content.Context context, Intent intent) { 

      Log.i(TAG, "onReceive"); 

      MyPhoneStateListener qpsl = new myPhoneStateListener(); 
      TelephonyManager tm = (TelephonyManager)context.getSystemService(android.content.Context.TELEPHONY_SERVICE); 
      tm.listen(qpsl, PhoneStateListener.LISTEN_SERVICE_STATE); 
     } 
    } 

    private class MyPhoneStateListener extends PhoneStateListener{ 

public void onServiceStateStateChanged(ServiceState serviceState){ 
    Log.i(TAG, "ServiceState = " + serviceState.getState(); 
} 

我知道我需要修改清單的廣播接收器和phonestate。哪裏?我想這個應用程序廣泛。

這是我所有的代碼,有人可以告訴我我失蹤了什麼,以便我可以監聽服務狀態更改?

回答

0

我懷疑沒有爲你工作的原因是從未收到廣播。您在清單中註冊了哪些廣播?請記住,電話狀態改變不是「傳統」廣播。您需要註冊此PhoneStateListener對象。在這種情況下,您不需要BroadcastReceiver。改爲使用Service。只需將onReceive()以上的代碼移動到ServiceonStartCommand(),您應該很好。

我在一個簡單的「差信號歷史記錄」應用程序中實現了類似的東西,它工作正常。該項目上傳here

+0

我應該在清單中放置什麼來完成這項工作?我如何註冊接收器? – 2012-02-23 17:58:05

+0

就像我說的,因爲手機狀態不是傳統的「廣播」。如果它是一個,你必須在清單中註冊它,並提及你的'BroadcastReceiver'感興趣的廣播意圖。「註冊」電話狀態監聽器的正確方法是使用'TelephonyManager''監聽()'方法,你已經在做。現在你所需要做的就是將這段代碼移出'onReceive()',因爲它永遠不會被調用。檢查這個答案在SO - http://stackoverflow.com/a/8657099/570930 – curioustechizen 2012-02-24 02:04:38