【发布时间】:2012-08-10 20:25:55
【问题描述】:
IntentFilter intentFilter = new IntentFilter("test");
registerReceiver(mReceiver, intentFilter);
我不希望有像 registerReceiver(mReceiver, null) 这样的过滤器,但我的应用程序因此而崩溃。我可以将new IntentFiler() 设为空文件管理器吗?
【问题讨论】:
IntentFilter intentFilter = new IntentFilter("test");
registerReceiver(mReceiver, intentFilter);
我不希望有像 registerReceiver(mReceiver, null) 这样的过滤器,但我的应用程序因此而崩溃。我可以将new IntentFiler() 设为空文件管理器吗?
【问题讨论】:
因为当通过IntentFilter 的条件不匹配时,BroadcastReceiver 返回null,所以 API 无法完成您希望完成的任务(我假设发送任何和所有广播到mReceiver)。
您当然可以指定一个空的IntentFilter,但这将毫无用处,因为注册接收器不会导致它捕获任何广播(除非它们直接针对接收器,正如 MisterSquonk 在 cmets 中提到的那样) .否则,您必须确切知道要使用 BroadcastReceiver 捕获哪些广播,然后在 IntentFilter 中指定条件。
【讨论】:
<intent-filter> 元素的清单中使用<receiver> 元素注册BroadcastReceiver。在这种情况下,您可以通过显式指定其类来向该接收者发送Intent,就像您直接针对Activity 一样。例如,Intent i = new Intent(this, MyBroadcastReceiver.class);