如何将设备所有者设置为我的android应用程序?
我尝试使用以下命令将我的应用程序设置为平板电脑的设备所有者(无ROOT或NFC):如何将设备所有者设置为我的android应用程序?,android,kiosk,device-owner,Android,Kiosk,Device Owner,我尝试使用以下命令将我的应用程序设置为平板电脑的设备所有者(无ROOT或NFC): adb shell dpm set-device-owner com.test.my_device_owner_app/.MyDeviceAdminReceiver 很多网站上都写着like(因为我必须制作一个KIOSK应用程序)。首先,我进行了工厂重置,然后安装了我的应用程序,然后在shell上编写了此命令,但答案是: java.lang.IllegalStateException:尝试设置设备所有者,但未设
adb shell dpm set-device-owner com.test.my_device_owner_app/.MyDeviceAdminReceiver
很多网站上都写着like(因为我必须制作一个KIOSK应用程序)。首先,我进行了工厂重置,然后安装了我的应用程序,然后在shell上编写了此命令,但答案是:
java.lang.IllegalStateException:尝试设置设备所有者,但未设置设备
已设置。在android.os.Parcel.readException(Parcel.java:1554)
在android.os.Parcel.readException(Parcel.java:1499)
位于android.app.admin.IDevicePolicyManager$Stub$Proxy.setDeviceOwner(IDevicePolicyManager.java:3212)
位于com.android.commands.dpm.dpm.runSetDeviceOwner(dpm.java:114)
位于com.android.commands.dpm.dpm.onRun(dpm.java:82)
在com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
位于com.android.commands.dpm.dpm.main(dpm.java:38)
位于com.android.internal.os.RuntimeInit.nativeFinishInit(本机方法)
位于com.android.internal.os.RuntimeInit.main(RuntimeInit.java:249)
现在,我如何在不根除平板电脑的情况下解决此问题?我对联想瑜伽2平板电脑也有同样的问题 下面是我在研究此问题时发现的一些dpm源代码的剪贴
if (!allowedToSetDeviceOwnerOnDevice()) {
throw new IllegalStateException(
"Trying to set device owner but device is already provisioned.");
}
if (mDeviceOwner != null && mDeviceOwner.hasDeviceOwner()) {
throw new IllegalStateException(
"Trying to set device owner but device owner is already set.");
}
下面是允许设置设备所有者设备的实现
/**
* Device owner can only be set on an unprovisioned device, unless it was initiated by "adb", in
* which case we allow it if no account is associated with the device.
*/
private boolean allowedToSetDeviceOwnerOnDevice() {
int callingId = Binder.getCallingUid();
if (callingId == Process.SHELL_UID || callingId == Process.ROOT_UID) {
return AccountManager.get(mContext).getAccounts().length == 0;
} else {
return Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 0) == 0;
}
}
因此,首先确保所有帐户都已删除。检查设置>帐户。默认情况下,Lenovos bloat ware已创建本地日历帐户。你必须移除它
适用于具有root访问权限的用户
看。正如我从实现中看到的,dpm正在做与答案中描述的相同的事情。顺便说一下,我保留name属性没有问题
当您查看else
案例时,可以通过调用
settings put global device_provisioned 0
我对瑜伽平板电脑的体验
即使我有根访问权限,进行工厂重置并尝试device_owner.xml方法,我昨天也没有成功
我今天所做的是使用google帐户登录(昨天我跳过了这一部分),在“设置”>“帐户”中删除此帐户后,我(作为su)能够成功运行dpm
命令
更新
我有另一个瑜珈2平板电脑,没有根访问权限,也没有使用我的谷歌帐户登录,并且已经成功设置了设备所有者
有人认为我可以推荐你:在安装你的kiosk模式应用程序后,尝试关闭Android Studio。可能这会导致另一个Binder.getCallingUid()
您找到解决问题的方法了吗?我有联想a10-30。似乎联想在安装过程中创建了一个隐藏帐户,所以它说设备已经配置好了。没有……目前我还无法在这台平板电脑上设置设备的所有者。