我尝试使用以下命令将我的应用程序设置为平板电脑的device_owner(没有ROOT或NFC):
adb shell dpm set-device-owner com.test.my_device_owner_app/.MyDeviceAdminReceiver
喜欢写在许多网站上(因为我必须制作一个KIOSK APP)。首先我重置工厂,然后我安装了我的应用程序,然后我在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)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
在com.android.internal.os.RuntimeInit.main(RuntimeInit.java:249)
现在,我怎样才能解决这个问题而无需支持平板电脑?
答案 0 :(得分:0)
我在联想瑜伽2平板电脑上遇到了同样的问题。
以下是我在研究这个问题时发现的dpm源码。
from os import listdir
for file in listdir(<your directory>):
#if you have to be more selective inside your directory
#just add a conditional to skip here
with open(file, "rb"):
tree = ET.parse(data)
lst_jugador = tree.findall('data_panel/players/player')
for jugador in lst_jugador:
print (jugador.find('name').text, jugador.get("id"))
这是 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.");
}
实现
allowedToSetDeviceOwnerOnDevice
首先确保删除所有帐户。检查设置&gt;帐户。 Lenovos膨胀软件默认创建了本地日历帐户。你必须删除它。
对于有root权限的人
请参阅SO answer for manually creating the device_owner.xml。正如我从实现中看到的那样,dpm正在做与答案中描述的相同的事情。顺便说一句,我保留name属性没有问题。
当您查看/**
* 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;
}
}
案例时,可以通过调用
else
我使用瑜伽片的经历
即使我有root访问权限,重置工厂并尝试使用device_owner.xml方法,我昨天也没有成功。
我今天所做的是使用Google帐户登录(昨天我已跳过此部分),并在设置&gt;中删除此帐户后帐户我能够(作为 su )成功运行settings put global device_provisioned 0
命令。
<强>更新强>
我还有另一台没有root权限的Yoga 2平板电脑,没有使用我的Google帐户登录,并成功设置了设备所有者。
有人认为我可以推荐你:在安装自助服务终端模式应用后尝试关闭Android Studio。也许这会导致另一个dpm
。