我有一个带有意图过滤器的广播接收器,它指定了一个自定义类别:
<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中定义的相同的字符串。
我是否还需要为自定义类别意图过滤器做些什么呢?
答案 0 :(得分:3)
要通过此测试(操作测试),必须在Intent对象中指定的操作 匹配过滤器中列出的其中一个操作。如果对象(意图)或 filter没有指定动作,结果如下:
- 如果过滤器未能列出任何操作,则没有任何内容 意图匹配,所以所有意图都没有通过测试。没有意图可以获得 通过过滤器。
- 另一方面,没有指定动作的Intent对象 自动通过测试 - 只要过滤器包含at 至少一个动作。
您发现您的过滤器未指定操作,因此您的意图无法通过过滤器。要解决此问题,您需要为接收者的过滤器指定操作,或者不指定任何操作意图。