Existe-t-il un moyen de verrouiller l'écran Android via l'ADB?
Je trouve des moyens de verrouiller l'affichage dans un apk, mais je veux verrouiller l'écran du PC via ADB, pour simuler un délai d'affichage, sans avoir à attendre le délai.
Est-il possible de faire cela?
Merci, Diane
Cool, je viens de trouver KEYCODE_POWER
qui est 26.
donc ça marche en envoyant:
adb Shell input keyevent 26
qui verrouille l'écran si l'écran est déverrouillé. Si l'écran est déjà verrouillé, il réveille l'appareil.
Je suppose que la seule façon de s'assurer que l'écran est verrouillé (désactivé) est de le déverrouiller (nous utilisons keyevent 82 (menu), puis de le verrouiller avec le bouton d'alimentation keyevent. Quelqu'un a-t-il une idée si c'est vrai?
Michael R. Hines a donné ce qui est sans doute la solution la plus simple. Cependant, la ligne suivante n'est pas utile dans les versions ultérieures d'Android.
adb Shell input keyevent 82 # unlock
J'ai mis à jour le script Shell en utilisant les coordonnées de l'appareil individuel que je veux réveiller (tablette). Ma tablette ne prend pas en charge les changements d'orientation pour les événements d'écran de verrouillage, donc les valeurs fonctionnent toujours car l'écran de verrouillage est toujours en mode paysage. Si vous avez besoin d'une détection de changement d'orientation, un simple si/alors/autre suffirait pour choisir les coordonnées correctes à utiliser pour l'orientation.
#!/bin/bash
if [ "$(adb Shell dumpsys power | grep mScreenOn= | grep -oE '(true|false)')" == false ] ; then
echo "Screen is off. Turning on."
adb Shell input keyevent 26 # wakeup
adb Shell input touchscreen swipe 930 380 1080 380 # unlock
echo "OK, should be on now."
else
echo "Screen is already on."
echo "Turning off."
adb Shell input keyevent 26 # sleep
fi
Voici le tout dans un seul script bash qui vérifie si l'écran est réellement allumé ou non, puis se réveille et déverrouille l'écran en une seule fois:
if [ "$(adb Shell dumpsys power | grep mScreenOn= | grep -oE '(true|false)')" == false ] ; then
echo "Screen is off. Turning on."
adb Shell input keyevent 26 # wakeup
adb Shell input keyevent 82 # unlock
echo "OK, should be on now."
else
echo "Screen is already on."
fi
Vous avez déjà trouvé une solution, mais je vais quand même mettre ce code ici pour référence.
Ce que vous pourriez faire est d'injecter l'événement pour "appuyer" deux fois sur le bouton d'alimentation. Si vous ne connaissez pas l'état de l'appareil (affichage activé/désactivé), vérifiez si l'écran est actuellement allumé ou éteint et appuyez sur le bouton d'alimentation en conséquence.
Voici un simple script monkeyrunner:
import re
from Java.util import *
from com.Android.monkeyrunner import MonkeyRunner, MonkeyDevice
device = MonkeyRunner.waitForConnection() # connect to a device
device.Shell("input keyevent KEYCODE_POWER") # turn screen off (or on?)
res = device.Shell("dumpsys power") # fetch power state
m = re.search(r'.*mPowerState=([0-9]+).*', res) # parse the string
if m and int(m.group(1)) == 0: # screen is off
device.Shell("input keyevent KEYCODE_POWER") # turn the screen on
En plus des réponses précédentes, voici ce que je fais pour verrouiller/déverrouiller mon écran en utilisant adb:
adb Shell input keyevent 26
verrouillera l'écran.
Donc, si vous exécutez à nouveau cette commande, alors que l'écran est éteint/verrouillé, il sera allumé/déverrouillé.adb Shell input keyevent 26
déverrouillera également l'écran (si l'écran est verrouillé).
De plus, j'ai également testé toutes les commandes, telles que adb Shell input keyevent number
, et a découvert que adb Shell input keyevent 3
déverrouille également l'appareil.
J'avais également découvert (en testant) que la touche 3 était le bouton d'accueil. Donc, si vous avez un bouton d'accueil physique (pas le bouton d'accueil doux à l'écran), vous pouvez également l'utiliser pour déverrouiller votre appareil.
Vous pouvez utiliser la commande suivante pour déclencher l'affichage ON. adb Shell entrée keyevent POWER
J'ai essayé et j'utilise dans mon projet, j'espère que cela fonctionnera pour vous.
Et voici le code Ruby que j'ai utilisé:
def ScreenCheck()
system("adb Shell dumpsys power > c:/interact.log")
File.open("C:\\interact.log").each do |line|
if line[/mScreenOn/]
if line.strip == "mScreenOn=true"
p "Screen is On, Starting execution.."
else
p "Screen is Off, starting screen.."
system("adb Shell input keyevent = POWER")
p "Starting execution.."
end
end
end
end
Pour ceux qui utilisent des versions antérieures de Android (4.2+ au moins), dumpsys power
a une sortie différente.
À la place d'utiliser mPowerState=
comme réponse donnée par @ Jakub Czaplicki , j'ai utilisé mScreenOn=
.
p = Runtime.getRuntime().exec("su", null, null);
OutputStream o = p.getOutputStream();
o.write(("dumpsys power").getBytes("ASCII"));
o.flush();
o.close();
p.waitFor();
boolean screenState;
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((res = in.readLine()) != null) dump += res;
screenState = dump.charAt( dump.indexOf("mScreenOn=") + 10 ) == 't';
screenState
est true
(écran sur ), ou false
(écran éteint ).
Voici un script pour allumer/éteindre l'écran pour chaque appareil connecté, y compris tous les appareils pré-Lollipop. Je l'utilise sur mon serveur Jenkins juste avant d'exécuter des tests Android Android pour s'assurer que les appareils sont prêts à fonctionner. J'espère que quelqu'un trouvera cela utile!
#!/bin/sh
# Returns the power state of the screen 1 = on, 0 = off
getDisplayState() {
state=$(adb -s $1 Shell dumpsys power | grep mScreenOn= | grep -oE '(true|false)')
# If we didn't get anything it might be a pre-Lollipop device
if [ "$state" = "" ]; then
state=$(adb -s $1 Shell dumpsys power | grep 'Display Power' | grep -oE '(ON|OFF)')
fi
if [ "$state" = "ON" ] || [ "$state" = "true" ]; then
return 1;
else
return 0;
fi
}
echo "Turning on screen on all connected devices..."
for device in `adb devices | grep device$ | cut -f1`
do
echo -n "Found device: $device ... "
getDisplayState $device
state=$?
# If the display is off, turn it on
if [ $state -eq 0 ]; then
echo "display was off, turning on"
adb -s $device Shell input keyevent 26
else
echo "display was on"
fi
done