这个答案 https://stackoverflow.com/a/27909315/1953590表明 Android 应用程序可以运行dpm
像这样:
Runtime.getRuntime().exec("dpm set-device-owner com.test.my_device_owner_app");
在我运行 5.1.1 的 Nexus 4 上,此问题会默默失败。 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 的设备上部署自助服务终端模式应用程序已经很痛苦了,因为您必须启用开发人员模式并通过以下方式安装应用程序adb
。我想配置者只需要运行dpm
手动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)