2011-04-17 72 views
1

在我AndroidManifest.xml中,我有以下...IntentService無法接收網絡狀態改變的意圖

<service 
    android:name=".MyIntentService" > 
    <intent-filter> 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />" 
     <action android:name="com.mycompany.myapp.TEST" /> 
    </intent-filter> 
</service> 
<receiver 
    android:name=".MyNetworkMonitor" > 
    <intent-filter> 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />" 
    </intent-filter> 
</receiver> 

理想情況下,我想了IntentService爲「喚醒」並解釋由廣播的意圖(S)系統,無論是Wi - Fi或移動互聯網服務改變國家......但它沒有。

的廣播接收器確實然而收到意圖,我可以得到它發送廣播意圖(com.mycompany.myapp.TEST)來喚醒我IntentService,並告訴它出現了網絡狀態的變化。

所以問題是,爲什麼我的IntentService不會從系統意圖中喚醒來通知網絡狀態的變化,而是會從我的BroadcastReceiver的廣播中喚醒。困惑。

編輯:這就是你在近5點(oops)試圖編碼的結果。出於某種原因,我認爲com.mycompany.myapp.TEST的意圖是作爲一個廣播。

什麼我實際上做的是Intent i = new Intent ("com.mycompany.myapp.TEST"),然後用startService(i)這工作,因爲<intent-filter>條目(即使沒有在意向明確指定MyIntentService.class)的。這是令人困惑的問題。

回答

5

你可以認爲Intent消息總線作爲有三個渠道:

  • 可以開始活動
  • 您可以啓動或綁定到服務
  • 您可以發送廣播

這三個通道是完全獨立的。您不能讓服務接收廣播,因爲您正在嘗試在此處進行廣播,除此之外,您還可以讓服務收到開始活動Intent

請從服務中刪除<intent-filter>。然後,在廣播到達時,請撥打BroadcastReceiver致電startService()服務(使用new Intent(context, MyIntentService.class))。

+0

感謝您澄清我無法使用廣播啓動服務。看到我的編輯結束我的問題,解釋爲什麼我感到困惑。 – Squonk 2011-04-17 19:00:58