Comment verrouiller écran Android via ADB?
y a-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 depuis le PC via ADB, pour simuler un délai d'affichage, sans avoir à attendre le délai d'affichage.
Est-il possible de faire cela?
Merci, Diane
8 réponses
Cool, je viens de trouver KEYCODE_POWER
qui est de 26.
donc cela fonctionne en envoyant:
adb shell input keyevent 26
verrouillage de l'écran si l'écran est déverrouillé. Si l'écran est déjà verrouillé, il réveille l'appareil.
Ma conjecture est que la seule façon de s'assurer que l'écran est verrouillé (désactivé), est pour le déverrouiller (nous utilisons keyevent 82 (menu), puis le verrouiller avec le bouton d'alimentation keyevent. Quelqu'un a une idée si c'est vrai?
Michael R. Hines a donné la solution la plus facile. 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 chaque périphérique que je veux réveiller (tablette). Ma tablette ne supporte pas les changements d'orientation pour les événements lockscreen, de sorte que les valeurs fonctionnent toujours comme le lockscreen est toujours dans le paysage. Si vous avez besoin d'une détection de changement d'orientation, un simple if / then / else choisir les bonnes coordonnées 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 et puis se réveille et déverrouiller l'écran d'un seul coup:
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 pouvez faire est d'injecter l'événement pour "appuyer" sur le bouton d'alimentation deux fois. Si vous ne connaissez pas l'état de l'appareil (affichage on/off), vérifiez si l'écran est activé ou désactivé et appuyez sur le bouton d'alimentation en conséquence.
voici un simple monkeyrunner script:
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
verrouillage de l'écran.
Donc, si vous exécutez cette commande à nouveau, tandis que l'écran est éteint / verrouillé, il sera allumé / déverrouillé.adb shell input keyevent 26
permet également de déverrouiller l'écran (si l'écran est verrouillé).
de plus, j'ai testé toutes les commandes, comme adb shell input keyevent number
, et a trouvé que adb shell input keyevent 3
déverrouillez aussi le appareil.
j'avais aussi découvert (en testant) que la touche 3 est le bouton home. Donc , si vous avez un bouton d'accueil physique (pas le soft bouton home sur l'écran), vous pouvez également l'utiliser pour déverrouiller votre appareil.
Pour ceux qui utilisent des versions antérieures d'android (4.2+ au moins),dumpsys power
a une sortie différente.
Au lieu d'utiliser mPowerState=
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
true
(écran ), ou false
(écran ).
Vous pouvez utiliser la commande suivante pour déclencher l'affichage. adb shell entrée keyevent PUISSANCE
j'ai essayé et j'utilise dans mon projet, j'Espère qu'elle va travailler 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
Voici un script pour activer/désactiver l'écran pour chaque appareil connecté, y compris les pré-sucette appareils. Je l'utilise sur mon serveur Jenkins juste avant d'exécuter des tests Android connectés pour m'assurer que les appareils sont prêts à démarrer. J'espère que quelqu'un trouve cette pratique!
#!/bin/sh
# Returns the power state of the screen 1 = on, 0 = off
getDisplayState() {
state=$(adb -s 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 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