如何调试BOOT_COMPLETE广播接收器的“强制关闭”崩溃?

19

由于手机正在启动并因此断开与Eclipse调试器/LogCat的连接,我该如何查看我的启动完成广播接收器在哪里崩溃?

我在我的public class BootCompleteReceiver extends BroadcastReceiver {...}onReceive() 中执行一些操作。

当手机启动时,这会导致应用程序崩溃并弹出一个强制关闭对话框。我该如何调试并找到问题所在?

这个问题适用于调试任何BOOT_COMPLETE广播接收器。

谢谢!

编辑

是的,我们可以在手机启动时在LogCat中查看系统日志,但是我的应用程序 Log.d(TAG,"Boot completed") 必须等到它(onReceive)被触发才能记录日志,但是在此之前,应用程序就已经崩溃了,因为问题可能在接收器本身中。在“调试模式下运行”无法用于正在重新启动的手机...


2
如果不需要在引导时调用,您可以稍后调用该方法进行测试。 - Nappy
4个回答

80

正如我在另一个帖子中所写:

您可以通过连接到设备并打开设备 shell 来模拟所有广播操作。

步骤如下:

  • 打开控制台/终端并导航到 /platform-tools
  • 输入 "adb shell" 或在 Linux/macOS 上输入 "./adb shell"
  • 在 shell 中输入 "am broadcast -a android.intent.action.BOOT_COMPLETED" 或任何其他要触发的动作。

这样您就应该能够进行调试了。

adb 或 adb shell 还有一堆好用的命令,尝试一下吧。

敬礼 Flo

编辑: 使用上述方法也将重启设备。为防止设备重新启动,请使用 am broadcast -a android.intent.action.BOOT_COMPLETED com.example.app。请注意添加应用程序包名称的后缀以将广播发送到“只有您的应用程序”进行调试。– Roel van Uden


1
非常好的答案。如果可以的话,我会接受这个答案。还有一件事需要注意,有时候我会遇到在启动时向logcat报告日志的问题,但是使用模拟器,我能够完美地测试并获得适当的日志。谢谢! - Dave
10
输入命令 /Android/sdk/platform-tools/adb shell am broadcast -a android.intent.action.BOOT_COMPLETED 会导致手机重新启动 :-( 因此,调试器会被断开连接。 - Someone Somewhere
6
我使用 am broadcast -a android.intent.action.BOOT_COMPLETED com.example.app 解决了这个问题。请注意后缀与应用程序包名称一起使用,以便广播仅发送到您自己的应用程序进行调试。这使您能够将 BOOT_COMPLETED 意图仅发送给您的应用程序。 - Deathspike
5
我尝试了这个,但是收到了“权限拒绝”的错误消息:“无法从pid=.... uid=....发送广播...”。 - Zordid
1
安全异常:权限拒绝:不允许发送广播android.intent.action.BOOT_COMPLETED - tim4dev
显示剩余4条评论

2

接收器只在您的代码运行时控制(即当手机启动时)。 在调试期间,请手动运行代码。 您可以通过这种方式解决99%的问题,剩下的问题(如果有)可以通过编写到LogCat以查看您的代码正在执行什么来解决。


有什么想法为什么logcat没有显示我引导接收器类的任何内容吗? - gyozo kudor

1

只需在Android Studio终端中输入以下命令:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETE


请注意,正确的写法是android.intent.action.BOOT_COMPLETED而不是android.intent.action.BOOT_COMPLETE(末尾缺少一个字母D)。 - Bennik2000

1

请检查您接收到的Intent的操作和bundles,它们可能为空并且可能会引发空指针异常。


1
我同意那是我们可以做的,但我的问题是如何使用调试器调试这种情况? - Vikas Singh
无法完成,因为adb也会重新启动,因此您无法进行调试。只有当adb启动后,您的调试才会开始,但在此之前,您的接收器会崩溃。尝试此场景后告诉我。 - Its not blank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接