【问题标题】:Not allowed to set the device owner because there are already several users on the device不允许设置设备所有者,因为设备上已有多个用户
【发布时间】:2017-10-24 15:17:13
【问题描述】:

我正在关注此tutorial 将应用设置为设备所有者。在该教程中,有一节“使用 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 link,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)

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

【问题讨论】:

    标签: android adb device-owner


    【解决方案1】:

    有一种方法可以在不将设备恢复出厂设置的情况下解决此问题。只需从您的设备中删除所有帐户(在“设置”->“帐户”中)。您可能希望在执行此操作之前同步数据,以便稍后恢复它们。删除所有账号后,将手机连接电脑,运行命令:

    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 和/或某些手机中,在恢复出厂设置后,除非您设置了谷歌帐户,否则它们不允许继续前进。因此,为了解决这个问题,请继续注册您的谷歌帐户,当您的手机恢复正常可操作状态时,通过进入设置-> 帐户删除该帐户。现在你只需要enable developer mode and then USB debugging。然后将手机连接到电脑并运行命令adb shell dpm set-device-owner sdg.example.kiosk_mode/.AdminReceiver

    【讨论】:

    • 应该注意的是,在现代(S6+ ?)三星手机上删除所有帐户并尝试这样做仍然不起作用。唯一的方法是删除所有帐户,然后恢复出厂设置。
    • @NickBetcher 在我的情况下,我从 settings->accounts 中删除了所有帐户,但仍然收到多个帐户登录的错误。我卸载了每个应用程序,但没有任何帮助。最后重置手机修复了它。但在我的情况下这不是解决方案,你能告诉我这些隐藏的帐户是什么,我怎么能知道这些?
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        *在我的情况下,仍然登录的应用是 reddit 和 zoho invoice

        【讨论】:

        • 您能详细说明您点击的“那个”吗?
        • 在我的情况下,我从设置->帐户中删除了所有帐户,但仍然收到多个帐户登录的错误。我卸载了每个应用程序,但没有任何帮助。最后重置手机修复了它。但在我的情况下这不是解决方案,你能告诉我这些隐藏帐户是什么,我怎么能知道这些
        【解决方案5】:

        按照以下说明解决问题:

        1. 删除设置中的所有帐户->帐户
        2. 使用命令:adb shell dumpsys account(会列出所有未列出的账户,卸载所有应用)
        3. 再试一次

        【讨论】:

        • 在我的情况下,我从设置->帐户中删除了所有帐户,但仍然收到多个帐户登录的错误。我卸载了每个应用程序,但没有任何帮助。最后重置手机修复了它。但在我的情况下这不是解决方案,你能告诉我这些隐藏帐户是什么,我怎么能知道这些
        猜你喜欢
        • 2018-04-16
        • 1970-01-01
        • 1970-01-01
        • 2017-05-01
        • 2019-07-17
        • 2016-04-03
        • 1970-01-01
        • 2015-07-27
        • 2021-11-21
        相关资源
        最近更新 更多