意图上的setData会阻止sendBroadcast工作吗?

时间:2011-03-07 13:25:47

标签: android

我已注册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,则不会收到广播。

有人可以解释为什么设置意图数据会阻止广播工作吗?

2 个答案:

答案 0 :(得分:4)

Android不仅可以查看ACTION,还可以查看数据和模式的类型。你应该告诉你的接收者可以通过调用IntentFilter上的addDataSchema()或addDataType()来接收这种类型。如果你只想发送String,你为什么不使用额外的东西?

答案 1 :(得分:1)

我同意诅咒。

来自Android开发者: 添加一个新的Intent数据方案以匹配。如果过滤器中包含任何方案,则Intent的数据必须是这些方案之一或匹配的数据类型。如果不包含任何方案,那么仅当Intent不包含数据时才会匹配。

反之,如果在Intent中添加数据,则必须在intent过滤器中添加数据类型或方案。