2012-07-23 76 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