【问题标题】:cannot reboot Android from terminal无法从终端重新启动 Android
【发布时间】:2019-03-11 12:59:51
【问题描述】:

我需要经常重启我的应用来测试某些组件的行为。所以我想从终端使用cmd,以免浪费时间手动关闭/打开。我找到了这段代码,但是当我把它放在终端上时,它会返回一个权限错误。

CMD 从终端重启:

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

终端响应:

java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=13940, uid=2000
        at android.os.Parcel.readException(Parcel.java:1665)
        at android.os.Parcel.readException(Parcel.java:1618)
        at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3533)
        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)

【问题讨论】:

  • 它无论如何都不起作用
  • 无论如何重启系统不应该受到应用清单的影响
  • 您尝试在主机 PC 终端中运行此命令,对吗?
  • logcat左边那个

标签: android user-permissions android-reboot


【解决方案1】:

该广播不起作用,因为它是系统特权Intent。如果您只需要在某个活动中重新启动您的应用程序清理,am 命令有一个选项可以在传递Intent 之前强制停止正在运行的进程 (-S):

adb shell am -S -a "android.action.MAIN" -c "android.category.DEFAULT" -n "your.package.name/.YourActivityName"

【讨论】:

  • 我不需要重新启动应用程序。我需要触发系统重启的事件,而不需要关闭/打开手动操作。
  • 好的,你的问题并不清楚。您不能通过发送 Intent 直接模拟启动完成。系统只允许内部Android框架发送。
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 2020-12-15
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多