web-dev-qa-db-ja.com

デバイスには既に複数のユーザーがいるため、デバイスの所有者を設定することはできません

アプリをデバイス所有者として設定するために、これを tutorial に従っていました。そのチュートリアルには、「adbを使用してデバイス所有者を設定する」セクションがあります。ここのチュートリアルでは、キオスクモードデモアプリをインストールした後、次のコマンドを実行します。

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リンク そして、ディエゴ・プラセンシア・ララの答えは私を取り除くのを助けました

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)

このエラーが発生する理由と、これを削除するにはどうすればよいですか?以前に別のアプリをデバイスの所有者として設定しようとしましたが、それらを完全に実行することはできなかったと思います。デバイスでアプリを実行する手順全体を完了する間、常にいくつかのエラーが発生しました。

11
Ankit Shubham

デバイスを工場出荷時にリセットせずに、この問題を解決する方法があります。デバイスからすべてのアカウントを削除するだけです([設定]-> [アカウント]で)。後で復元できるように、これを行う前にデータを同期することができます。すべてのアカウントを削除した後、電話をコンピューターに接続して、コマンドを実行します。

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が指摘したように、工場出荷時設定へのリセットは、アプリをデバイス所有者として設定する方法の1つです。アカウント(Gmailアカウントなど)がありました。ただし、最近のバージョンのAndroidおよび/または一部の携帯電話では、工場出荷時設定へのリセットを行った後、Googleアカウントを設定していない限り前進できません。したがって、これを解決するには、 Googleアカウントを登録し、携帯電話が通常の操作可能な状態に戻ったら、[設定]-> [アカウント]でそのアカウントを削除します。必要なのは 開発者モードを有効にしてからUSBデバッグ です。その後、電話機をコンピューターに接続し、adb Shell dpm set-device-owner sdg.example.kiosk_mode/.AdminReceiverコマンドを実行します。

15
Ankit Shubham

この投稿では、dpmコマンドに関する非常に優れた概要を示します。 http://florent-dupont.blogspot.fr/2015/01/Android-Shell-command-dpm-device-policy.html

投稿の終わり近くに、この更新が追加されました:「「adb」によって開始された場合を除き、デバイスの所有者はプロビジョニングされていないデバイスにのみ設定できます。ソースコードに記載されています。したがって、dpmコマンドを使用する前に、現在のユーザーセットにアカウント(Gmailなど)が関連付けられていないことを確認してください

Dpmafterを使用してデバイス所有者としてアプリをインストールして設定することをお勧めします。工場出荷時の設定にリセットし、Google Wizardアカウントを設定せずに、設定から開発者モードを有効にし、最後に「USBデバッグ」を有効にします...それがあなたにとって実行可能なオプションである場合...

4
Steve Miskovetz