ADB shell:如何获取将接收BOOT_COMPLETED Intent的BroadcastReceiver列表?

12

我目前正在调试一个应用程序,该应用程序应该在设备启动后自动启动。为此,我创建了一个BroadcastReceiver并将其添加到我的AndroidManifest.xml中:

<receiver android:name=".receiver.StartupBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

这个方案通常在大多数设备上都能正常工作。但是,在一个设备上(MXQ Pro机顶盒)它只有大部分时间可以工作。到目前为止,我还没有找到任何它什么时候工作、什么时候不工作的规律。

因此,我想找出哪些BroadcastReceiver实际上已经注册到系统中以接收BOOT_COMPLETED Intent。

我尝试使用:

  • pm:但这只告诉我哪些包想要接收Intent。
  • dumpsys:但其输出过于庞大,我不知道该找什么。

感谢任何建议!


尝试过 dumpsys activity -h 吗? - pskink
1
啊,是的,我确实看过文档了。dumpsys activity b 看起来很有希望,但即使在一切正常的设备上,我也无法在其中找到我的包名或实际的 BroadcastReceiver。虽然有成百上千个“ReceiverLists”,每个都有自己的ID,但是没有一个与例如 dumpsys package my.package.name 的输出相匹配。因此感到了“压倒性的”困难。 - david.mihola
3
我刚刚运行了命令dumpsys package my.package.name,得到以下结果:接收器解析器表: 非数据动作: android.intent.action.BOOT_COMPLETED: 52b3eee0 my.package.name/.MyReceiver filter 52b3ef68 Action: "android.intent.action.BOOT_COMPLETED" - pskink
1个回答

23

如果您只需要确认某个特定的接收器已经被正确注册(即您只关心您知道名称的某个特定包中的接收器),那么只需像@pskink在评论中建议的那样使用dumpsys package my.package.name即可。

但是,如果您确实想要知道在整个系统中接收某个特定意图的所有接收器 - 自Android 7.0以来,您可以使用

adb shell cmd package query-receivers --brief -a android.intent.action.BOOT_COMPLETED

如果您想获得更多细节,请删除--brief参数。如果只想列出名称:

adb shell cmd package query-receivers --components -a android.intent.action.BOOT_COMPLETED

1
是否还有一种方法可以一次性获取所有接收器,而不仅仅是BOOT_COMPLETED的接收器。 - phrogg
@Alex P. 如何检查接收器是否已注册,而不需要ACTION(显式)? - Piyush Kukadiya

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