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

时间:2017-05-24 10:24:02

标签: android adb device-owner

我正在关注此tutorial以将应用设置为设备所有者。在该教程中,有一节“使用adb设置设备所有者”。这里的教程说明在安装Kiosk模式演示应用程序后,运行以下命令:

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)

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

4 个答案:

答案 0 :(得分:11)

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

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帐户,当您的手机恢复正常可操作状态时,请通过设置 - >删除该帐户。帐户。现在你所需要的只是enable developer mode and then USB debugging。然后将手机连接到计算机并运行命令adb shell dpm set-device-owner sdg.example.kiosk_mode/.AdminReceiver

答案 1 :(得分:4)

这篇文章对dpm命令给出了非常好的概述: http://florent-dupont.blogspot.fr/2015/01/android-shell-command-dpm-device-policy.html

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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