通过adb shell和代码了解命令 – Android

我正尝试将BATTERSTATS权限授予应用程序。 当我从PC运行命令 – 它工作得很好:

 adb shell pm grant com.example.sample.myapplication android.permission.BATTERY_STATS 

但同样的pm grant命令从Android应用程序运行时不起作用:

 java.lang.Process process = Runtime.getRuntime().exec("pm grant com.example.sample.myapplication android.permission.BATTERY_STATS"); 

是否需要root权限才能授予此权限? 如果是这样的话,为什么不需要设备通过adb shell来运行它?

我是Android新手,请更清楚地解释一下内部发生了什么以及如何继续。

你用adb shell运行的命令用shell(UID=2000)用户权限执行。 您从您的java代码运行的命令将以您的应用程序的UID权限执行。 因此有所不同。