This answer表明android应用程序可以像这样运行:
Runtime.getRuntime().exec("dpm set-device-owner com.test.my_device_owner_app");
在我运行5.1.1的Nexus4上,这会自动失败。shell返回错误代码0(成功),并且没有控制台输出。尽管取得了明显的成功,但我的应用程序并没有成为设备所有者。设备刚从出厂重置中恢复,未配置用户帐户。
作为一个控件,我尝试运行一个垃圾命令,而不是
dpm
。它按预期失败了。这有用吗?是故意的书呆子吗?
最佳答案
dpm
当命令语法错误时,错误退出,状态代码为0。正确的语法是dpm set-device-owner package/.ComponentName
。当语法正确时,exec(...)
抛出一个SecurityException
:
java.lang.SecurityException: Neither user 10086 nor current process has android.permission.MANAGE_DEVICE_ADMINS.
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1499)
at android.app.admin.IDevicePolicyManager$Stub$Proxy.setActiveAdmin(IDevicePolicyManager.java:2993)
at com.android.commands.dpm.Dpm.runSetDeviceOwner(Dpm.java:110)
at com.android.commands.dpm.Dpm.onRun(Dpm.java:82)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
at com.android.commands.dpm.Dpm.main(Dpm.java:38)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:249)
将此权限添加到清单没有帮助,因此它可能是仅限系统的权限。
在没有nfc的设备上部署一个kiosk模式的应用程序已经是一件麻烦事了,因为你必须启用开发者模式并通过
adb
安装应用程序。我想provisioner只需要手动运行dpm
。关于android - 使用Runtime.exec(...)运行dpm,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30674921/