[英]Unable to set device owner through programmatically
我尝试执行以下代码将我的应用设置为设备所有者。 我不能使用 ADB,因为我有超过 10K 的 android-9 无根设备。 因此,需要以编程方式执行此操作。
String name = AdminReceiver.class.getName();
if (name.startsWith(BuildConfig.APPLICATION_ID)) {
name = name.substring(BuildConfig.APPLICATION_ID.length());
}
final String command = "dpm set-device-owner " + BuildConfig.APPLICATION_ID + '/' + name;
Process process = Runtime.getRuntime().exec(command);
Log.d(TAG,"RETURN VALUE:"process.waitFor();
process.waitFor() 总是返回 1。
需要以编程方式执行此操作
幸运的是,出于明显的安全原因,这是不可能的。
请改用二维码注册!
您可以为您的设备所有者 package 生成包含 URL 的 QR 码。 然后您可以在设备的出厂设置过程中扫描此代码。
二维码中的数据如下所示:
{
"android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME": "com.google.android.apps.work.clouddpc/.receivers.CloudDeviceAdminReceiver",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM": "I5YvS0O5hXY46mb01BlRjq4oJJGs2kuUcHvVkAPEXlg",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION": "https://play.google.com/managed/downloadManagingApp?identifier=setup"
}
只需将信息替换为您自己的设备所有者 package 信息即可。 扫描后,设备将下载、安装并设置设备所有者。
如果您成为 Google 的 EMM 合作伙伴,您甚至可以通过从制造商处获取预配置的 android 设备来进行零接触注册。 但 Google 已停止批准自定义设备策略管理器的请求,您现在必须使用 Android 管理 API。
脚注
有点晚的答案,但它可能会在未来帮助一些开发人员。 下面 function 适用于 Android 11。
try {
Runtime.getRuntime().exec("dpm set-device-owner --user 0
com.example.myapp/com.example.myapp.DeviceAdminRcvr");
} catch (Exception e) {
e.printStackTrace();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.