2

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

    <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 包含与意图过滤器中定义的相同的字符串。

对于自定义类别意图过滤器,我还需要做些什么吗?

4

1 回答 1

3

文档说:

要通过此测试(Action test),Intent 对象中指定的操作必须与过滤器中列出的操作之一匹配。如果object(intent)或者filter没有指定action,结果如下:

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

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

于 2012-07-23T03:44:39.253 回答