繁体   English   中英

不允许设置设备所有者,因为设备上已有多个用户

[英]Not allowed to set the device owner because there are already several users on the device

我正在按照本教程将应用程序设置为设备所有者。 在该教程中,有一节“使用 adb 设置设备所有者”。 这里的教程说安装 Kiosk Mode Demo App 后,运行以下命令:

adb shell dpm set-device-owner sdg.example.kiosk_mode/.AdminReceiver

这给了我错误:

adb server is out of date.  killing...
* daemon started successfully *
java.lang.IllegalStateException: Not allowed to set the device owner because there are already several users on the device
    at android.os.Parcel.readException(Parcel.java:1629)
    at android.os.Parcel.readException(Parcel.java:1574)
    at android.app.admin.IDevicePolicyManager$Stub$Proxy.setDeviceOwner(IDevicePolicyManager.java:5146)
    at com.android.commands.dpm.Dpm.runSetDeviceOwner(Dpm.java:114)
    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:257)

我遵循了这个SO 链接,Diego Plascencia Lara 的回答帮助我摆脱了

adb server is out of date.  killing...
* daemon started successfully *

但是在运行adb shell dpm set-device-owner sdg.example.kiosk_mode/.AdminReceiver命令后仍然出现以下错误:

java.lang.IllegalStateException: Not allowed to set the device owner because there are already several users on the device
    at android.os.Parcel.readException(Parcel.java:1629)
    at android.os.Parcel.readException(Parcel.java:1574)
    at android.app.admin.IDevicePolicyManager$Stub$Proxy.setDeviceOwner(IDevicePolicyManager.java:5146)
    at com.android.commands.dpm.Dpm.runSetDeviceOwner(Dpm.java:114)
    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:257)

为什么会发生此错误,我该如何消除它? 我早些时候曾尝试将不同的应用程序设置为设备所有者,但我认为我没有设法完全取消它们,并且在完成使应用程序在设备上运行的整个过程时总是出现一些错误。

无需将设备恢复出厂设置即可解决此问题。 只需从您的设备中删除所有帐户(在“设置”->“帐户”中)。 您可能希望在执行此操作之前同步数据,以便以后可以恢复它们。 删除所有帐户后,将手机连接到计算机并运行命令:

adb shell dpm set-device-owner sdg.example.kiosk_mode/.AdminReceiver

如果您收到这样的消息:

Success: Device owner set to package ComponentInfo{org.bluetooth.bledemo/org.bluetooth.bledemo.AdminReceiver}
Active admin set to component {org.bluetooth.bledemo/org.bluetooth.bledemo.AdminReceiver}

认为自己成功了。 现在,您可以重新添加之前删除的所有帐户。

另一种方式:正如 Steve Miskovetz 在回答中指出的那样,如果之前您的手机有帐户(例如 Gmail 帐户),则恢复出厂设置是将应用程序设置为设备所有者的方法之一。 但是在最新版本的 Android 和/或某些手机中,在恢复出厂设置后,除非您设置了 google 帐户,否则它们不允许继续前进。 因此,为了解决此问题,请继续注册您的 Google 帐户,当您的手机恢复正常可操作状态时,请通过进入设置 -> 帐户删除该帐户。 现在您只需要启用开发人员模式,然后启用 USB 调试 之后将您的手机连接到计算机并运行命令adb shell dpm set-device-owner sdg.example.kiosk_mode/.AdminReceiver

这篇文章很好地概述了 dpm 命令: http : //florent-dupont.blogspot.fr/2015/01/android-shell-command-dpm-device-policy.html

在帖子的末尾,添加了此更新:“设备所有者只能在未配置的设备上设置,除非它是由“adb”启动的,在这种情况下,如果没有与设备关联的帐户,我们将允许它”说源代码。因此,在使用 dpm 命令之前,请确保您没有与当前用户集关联的任何帐户(如 Gmail)

我建议执行恢复出厂设置使用 dpm 将您的应用安装和设置为设备所有者,在不设置任何帐户的情况下通过 Google 向导,从设置中启用开发人员模式,最后启用“USB 调试”......如果这是一个可行的选择为你...

我在模拟器上遇到了同样的问题。 然后从 Android Studio 的 AVD 管理器中,我右键单击设备-> 擦除数据。

我知道这是 4 年前的帖子,但我遇到了同样的问题,我不想重置出厂数据,所以我点击了它,然后您将看到一个确认屏幕,显示您已安装的所有内容以及仍然登录的帐户,即使它们没有显示在帐户和备份下。

然后,您可以继续清除这些应用程序,然后就可以了!

*就我而言,仍然登录的应用程序是 reddit 和 zoho invoice

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM