无法通过adb shell发送android.intent.action.BOOT_COMPLETED。

4

我将要制作一个应用,需要在设备开机时自动启动服务。

我想使用adb测试这个功能。当我从adb输入以下命令时

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

我收到了以下错误信息。
Broadcasting: Intent { act=android.intent.action.BOOT_COMPLETED }
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=3566, uid=2000
        at android.os.Parcel.readException(Parcel.java:1683)
        at android.os.Parcel.readException(Parcel.java:1636)
        at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3507)
        at com.android.commands.am.Am.sendBroadcast(Am.java:772)
        at com.android.commands.am.Am.onRun(Am.java:404)
        at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
        at com.android.commands.am.Am.main(Am.java:121)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:262)

根据这个答案stackoverflow.com/a/10105047/106248,其他人没有遇到这个问题。

我正在测试的操作系统版本是Android 7.0。我在真实设备和模拟器上都遇到了同样的问题。

请帮助我解决这个问题。

谢谢。


你所引用的答案来自2014年,这并不能证明人们今天不会遇到这个问题。 - David Rawson
你尝试过评论中的建议吗:https://dev59.com/J2445IYBdhLWcg3wE2Re#MKygEYcBWogLw_1bjtNb - David Rawson
@DavidRawson 是的,我做了。 - samsri
实际上,我也无法让它工作 :( 我认为这只是Nougat的一些新安全设置,所以就放弃了。 - David Rawson
看起来有很多关于这个问题的询问:https://stackoverflow.com/search?q=android.intent.action.BOOT_COMPLETED - David Rawson
这解决了我的问题。当我搜索时,这个问题没有出现。希望这能指引其他人找到正确的答案。 - samsri
1个回答

5

以root模式重启ADB已经解决了我的问题:

adb root

你好,既然你之前回答了这个问题,能告诉我你使用的确切命令是什么吗?你是先执行 adb root 然后再执行广播命令,还是直接执行 adb root shell am... 命令? - vatbub
这是 adb root 命令(假设您有一个设备),它应该返回消息“正在以 root 权限重新启动 adbd”。然后需要单独调用 adb shell 命令才能进入 shell(作为 root 用户)。据我所知,这只能在模拟器上完成。 - jj.
1
我从真实设备上得到了“adbd cannot run as root in production builds”的提示。那么它只能在模拟器上工作吗? - JCarlosR

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