web-dev-qa-db-fra.com

Comment puis-je déverrouiller l'écran par programme dans Android?

Je travaille sur un framework de test automatisé à distance pour Android basé sur JUnit (les tests s'exécutent en dehors d'Android, interagissant avec le code qu'il contient). Tout fonctionne assez bien, mais l'un des problèmes que j'ai est que lorsque je démarre automatiquement un nouvel émulateur, l'écran est verrouillé au début. Cela semble avoir une incidence sur l'exécution de mes tests. De plus, je souhaite surveiller l'exécution des tests (boutons cliqués, texte tapé, etc.). Si je lance manuellement un émulateur et déverrouille son écran, tout fonctionne bien.

Existe-t-il un moyen de déverrouiller par programme l’écran dans Android? Une API Java, une ligne de commande ou une commande Shell, etc. Sauf que, peut-être un moyen de démarrer un émulateur débloqué?

29
SingleShot

Sie können avec dem Emulator über dessen Konsolenschnittstelle interagieren.

Cliquez sur le lien suivant pour afficher le code: 5554 a commencé, il est impossible de télécharger le port, il est juste.

Vous êtes le premier à afficher un commentaire sur ce livre avec le code de code __ _adb devices___mitteln. Die Ausgabe wird folgendermaßen aussehen:

C:\>adb devices
List of devices attached
emulator-5554   device

Vous pouvez également contacter un autre utilisateur pour plus d'informations sur un émulateur avec:

telnet localhost 5554

Vous êtes ici pour en savoir plus sur ce que vous avez dit, et sur tous les autres événements pour OK et pour vous informer sur les débuts de la formation.

En savoir plus sur ce livre, sur ce sujet, une annonce intéressante, est event, dans Hardware-Ereignisse zu simulieren. Wir können den Bildschirm par Drücken von entsperrenMenuwelches wir mit folgendem Befehl emulieren:

event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0

Le EV_KEY:KEY_MENU:1 ist das Key-Down-Ereignis et le EV_KEY:KEY_MENU:0 ist ds entsprechende Key-Up-Ereignis. Stellen Sie sicher, dass Sie beides tun. Andernfalls bleibt die Menütaste hängen.

Je ne sais pas, je ne sais plus quoi et c'était toujours pareil, c'était, je le savais, c'est vrai, c'est le problème.

Bearbeiten: Je ne sais pas, c'est tout: event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0 emuliertMenuNous sommes dans le droit chemin depuis le début des émulateurs, plus longtemps comme indiqué . Nous ne connaissons pas la guerre, nous ne sommes pas allés à Anfang.

22
Dave Webb

Le one-liner qui fonctionne pour moi sur les SDK Android r18 et r20 avec un émulateur 4.0.3 (API 15):

adb Shell input keyevent 82
18
Drew Stephens

Je crois que le lien suivant a la réponse que vous recherchez.

http://developer.Android.com/guide/topics/testing/activity_testing.html#UnlockDevice

Déverrouillage de l'émulateur ou du périphérique

Vous constaterez peut-être que les tests d'interface utilisateur ne fonctionnent pas si l'écran d'accueil de l'émulateur ou du périphérique est désactivé avec le motif de verrouillage du clavier. En effet, l'application testée ne peut pas recevoir les événements de clé envoyés par sendKeys (). Le meilleur moyen d'éviter cela consiste à démarrer d'abord l'émulateur ou le périphérique, puis à désactiver le verrouillage du clavier pour l'écran d'accueil. 

Vous pouvez également désactiver explicitement le clavier. Pour ce faire, vous devez ajouter une autorisation dans le fichier de manifeste (AndroidManifest.xml), puis désactiver le verrouillage du clavier dans votre application testée. Notez cependant que vous devez le supprimer avant de publier votre application ou le désactiver avec du code dans l'application publiée. 

Pour ajouter la permission, ajoutez l'élément en tant qu'enfant de l'élément. Pour désactiver KeyGuard, ajoutez le code suivant à la méthode onCreate () des activités que vous souhaitez tester: 

mKeyGuardManager = (KeyguardManager) getSystemService (KEYGUARD_SERVICE); mLock = mKeyGuardManager.newKeyguardLock ("activity_classname"); mLock.disableKeyguard (); où activity_classname est le nom de classe de l'activité.

12
luisr

Essayez ce script:

echo "event send EV_KEY:KEY_SOFT1:1" | nc -q1 localhost 5554
sleep 0.1
echo "event send EV_KEY:KEY_SOFT1:0" | nc -q1 localhost 5554
sleep 0.1
echo "event send EV_KEY:KEY_SOFT1:1" | nc -q1 localhost 5554
sleep 0.1
echo "event send EV_KEY:KEY_SOFT1:0" | nc -q1 localhost 5554
sleep 0.1
6
Yimin Li

Le moyen le plus simple de déverrouiller l'écran (en l'absence de mot de passe) consiste à transmettre un événement KEYCODE_MENU. Cependant, si l'écran est déjà déverrouillé, un menu apparaîtra, ce qui n'est probablement pas la fonctionnalité que vous recherchez.

Si vous voulez un moyen simple de garantir que l'écran sera déverrouillé sans ouvrir un menu par accident, vous devez d'abord transmettre un événement KEYCODE_POWER. Cela garantira que le périphérique est verrouillé. L'événement de menu ne déverrouille que l'écran.

adb Shell input keyevent KEYCODE_POWER; adb Shell input keyevent KEYCODE_MENU

(Remarque: le 82 qui apparaît dans les autres réponses est la constante KEYCODE_MENU.)

5
chinnychin19

J'ai réussi à le faire en utilisant le shell:

adb Shell
#input keyevent 82
4
Vladimir Perković

Vous pouvez verrouiller votre périphérique Emulator en exécutant cette commande à partir de la commande Invite. 

adb Shell input keyevent 26

Vous pouvez déverrouiller votre périphérique Emulator en exécutant cette commande à partir de la commande Invite. 

adb Shell input keyevent 82

Après avoir exécuté la commande de déverrouillage, vous devrez peut-être attendre quelques minutes. La commande de déverrouillage ci-dessus fonctionnera si vous n'avez pas de verrou de sécurité.

0
Ganesh Devaraj