Android自定义意图过滤器没有接收广播?

时间:2012-07-23 03:06:53

标签: android android-intent broadcastreceiver categories

我有一个带有意图过滤器的广播接收器,它指定了一个自定义类别:

    <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类别发出广播。我的问题是从未收到广播。

    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中定义的相同的字符串。

我是否还需要为自定义类别意图过滤器做些什么呢?

1 个答案:

答案 0 :(得分:3)

Documentation说:

  

要通过此测试(操作测试),必须在Intent对象中指定的操作   匹配过滤器中列出的其中一个操作。如果对象(意图)或   filter没有指定动作,结果如下:

     
      
  • 如果过滤器未能列出任何操作,则没有任何内容   意图匹配,所以所有意图都没有通过测试。没有意图可以获得   通过过滤器。
  •   
  • 另一方面,没有指定动作的Intent对象   自动通过测试 - 只要过滤器包含at   至少一个动作。
  •   

您发现您的过滤器未指定操作,因此您的意图无法通过过滤器。要解决此问题,您需要为接收者的过滤器指定操作,或者不指定任何操作意图。