我已注册BroadcastReceiver以侦听以下操作..
public static final String MY_ACTION = "com.blah.intent.action.DOSOMETHING";
在我的代码中我有
Intent intent = new Intent(MY_ACTION);
sendBroadcast(intent);
如果我使用它,广播将被发送和接收,但是如果我使用setData添加Uri 在通过添加这些行发送广播之前..
Uri uri = Uri.parse("/sdacrd/myfile");
intent.setData(uri);
如果我是setData,则不会收到广播。
有人可以解释为什么设置意图数据会阻止广播工作吗?
答案 0 :(得分:4)
Android不仅可以查看ACTION,还可以查看数据和模式的类型。你应该告诉你的接收者可以通过调用IntentFilter上的addDataSchema()或addDataType()来接收这种类型。如果你只想发送String,你为什么不使用额外的东西?
答案 1 :(得分:1)
我同意诅咒。
来自Android开发者: 添加一个新的Intent数据方案以匹配。如果过滤器中包含任何方案,则Intent的数据必须是这些方案之一或匹配的数据类型。如果不包含任何方案,那么仅当Intent不包含数据时才会匹配。
反之,如果在Intent中添加数据,则必须在intent过滤器中添加数据类型或方案。