广播接收者收到的意图是否可以为空?

Mr_*_*s_D 12 android nullpointerexception broadcastreceiver android-intent

换一种说法 :

@Override
public void onReceive(Context context, Intent intent) {
    final String action = intent.getAction(); // can intent==null here ?
    // could it ever throw a NPE ?
}
Run Code Online (Sandbox Code Playgroud)

我需要一劳永逸地解决这个问题,所以请不要错过.我会检查null,但我怀疑它不需要,因此它是笨拙和不优雅的检查.我在文档中搜索过但没有找到任何内容

编辑:在谷歌组问-看到一些有趣的点

bcl*_*mer 8

onReceive在a BroadcastReceiver中由一个Intent已注册的动作触发.因此,如果没有Intent是一个实例Intent而不是null,那么该onReceive方法永远不会被调用.

话虽如此,奇怪的事情可能会发生.我没有查看Google围绕广播编写的代码,所以虽然它的正确用法它永远不会为空,但检查是个好主意,因为它来自你无法控制的代码.

  • 我刚刚偶然发现了这种情况。当我卸载 SD 卡时,我的应用程序在 4.2.1 中崩溃了,并且在 logcat 中,一个 BroadcastReceiver.onReceive 覆盖中有一个 NPE。我可以轻松地重现它。一旦我对意图参数进行了空检查,应用程序就会停止崩溃。 (2认同)
  • 你可以发布你的`onReceive`代码和logcat吗?也许上传到pastebin.如果你能在代码中保留有用的行号.我对此很好奇. (2认同)