web-dev-qa-db-fra.com

Pas autorisé à définir le propriétaire de l'appareil car il y a déjà plusieurs utilisateurs sur l'appareil

Je suivais cela tutoriel pour définir l'application en tant que propriétaire de l'appareil. Dans ce didacticiel, il y a une section "Utiliser adb pour définir le propriétaire de l'appareil". Le didacticiel indique ici qu'après l'installation de l'application de démonstration du mode Kiosk, exécutez la commande suivante:

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

Cela m'a donné l'erreur:

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)

J'ai suivi cela lien SO et la réponse de Diego Plascencia Lara m'a aidé à me débarrasser de

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

Mais l'erreur suivante se produit toujours après l'exécution de adb Shell dpm set-device-owner sdg.example.kiosk_mode/.AdminReceiver commande:

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)

Pourquoi cette erreur se produit-elle et comment puis-je la supprimer? J'avais précédemment essayé de définir différentes applications en tant que propriétaire de l'appareil, mais je pense que je n'ai pas réussi à les supprimer complètement et il y avait toujours des erreurs lors de la procédure de mise en œuvre de l'application sur l'appareil.

11
Ankit Shubham

Il existe un moyen de résoudre ce problème sans réinitialiser le périphérique en usine. Supprimez simplement tous les comptes de votre appareil (dans Paramètres-> Comptes). Vous souhaiterez peut-être synchroniser les données avant de le faire afin de pouvoir les restaurer ultérieurement. Après avoir supprimé tous les comptes, connectez votre téléphone à l'ordinateur et exécutez la commande:

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

Si vous recevez un message comme celui-ci:

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}

considérez-vous comme un succès. Vous pouvez maintenant ajouter tous les comptes que vous avez supprimés précédemment.

Une autre façon : Comme l'a souligné Steve Miskovetz dans la réponse, la réinitialisation d'usine est l'un des moyens de définir l'application comme propriétaire de l'appareil si précédemment, votre téléphone avait des comptes (par exemple, des comptes Gmail). Mais dans les versions récentes de Android et/ou certains téléphones, après avoir réinitialisé les paramètres d'usine, ils ne permettent pas d'avancer à moins que vous n'ayez défini un compte Google. Donc, pour résoudre ce problème, allez-y et enregistrez votre compte Google et lorsque votre téléphone est de retour à son état de fonctionnement normal, supprimez ce compte en allant dans Paramètres -> Comptes. Maintenant, tout ce dont vous avez besoin est de activer le mode développeur puis le débogage USB . Ensuite, connectez votre téléphone à l'ordinateur et exécutez la commande adb Shell dpm set-device-owner sdg.example.kiosk_mode/.AdminReceiver.

15
Ankit Shubham

Ce billet donne un très bon aperçu de la commande dpm: http://florent-dupont.blogspot.fr/2015/01/Android-Shell-command-dpm-device-policy.html

Vers la fin du message, cette mise à jour a été ajoutée: " Le propriétaire de l'appareil ne peut être défini que sur un appareil non provisionné, sauf s'il a été lancé par" adb ", auquel cas nous l'autorisons si aucun compte n'est associé à la "indique le code source. Assurez-vous donc qu'aucun compte (comme Gmail) n'est associé à votre ensemble d'utilisateurs actuel avant d'utiliser la commande dpm"

Je recommande d'installer et de configurer votre application en tant que propriétaire de l'appareil en utilisant dpm après avoir effectué une réinitialisation d'usine, en passant par Google Wizard sans configurer de compte, activez le mode développeur à partir des paramètres et enfin activez le "débogage USB" ... Si c'est une option viable pour vous ...

4
Steve Miskovetz