2012-07-23 62 views
2

我有一個意圖過濾器,指定一個自定義類別的廣播接收器:Android自定義意圖過濾器沒有收到廣播?

<receiver 
     android:name=".sys.sub.SubServiceManager" 
     android:enabled="true" 
     android:exported="false" > 
     <intent-filter> 
      <category android:name="com.example.SUB_SERVICE_STATE" /> 
     </intent-filter> 
    </receiver> 

再有就是這個代碼中使用自定義操作該意圖類別發出廣播。我的問題是廣播從來沒有收到。

Intent speed = new Intent(); 
    speed.addCategory(inst.getString(R.string.subServiceCat)); 
    speed.setAction("com.example." + SubServiceManager.START_COMMAND + Example.NAME); 
    inst.sendBroadcast(speed); 

R.string.subServiceCat包含與intent-filter中定義的字符串相同的字符串。

還有什麼我必須做的自定義類別的意圖過濾器?

回答

3

Documentation說:

爲了通過該測試(動作試驗),在意圖對象中指定的動作必須 匹配在過濾器中列出的操作中的一個。如果對象(意向)或 過濾器不指定一個動作,結果如下:

  • 如果過濾器沒有列出任何動作,還有什麼比一個 意圖匹配,所以所有的意圖未通過測試。沒有意向可以通過過濾器獲得 。
  • 另一方面,未指定動作 的意圖對象自動通過測試 - 只要過濾器包含至少一個動作爲 。

您將看到,過濾器不指定一個動作,這樣你的意圖無法通過filter.To得到解決這個問題,你會以指定到接收器的濾波器的動作或不指定任何動作你的意圖。

+0

@ ghostsoldier23請參閱我的編輯。 – hasanghaforian 2012-07-23 03:52:15

+0

啊...所以你不能有一個意圖過濾器只指定一個類別。我想知道爲什麼?這對我來說很有意義... 那麼我將不得不重新設計。謝謝你的幫助! – bgroenks 2012-07-23 20:28:55