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

41
demandé sur naXa 2012-12-13 03:03:27

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?

63
répondu PurpleDiane 2012-12-14 22:54:05

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
15
répondu Rescue9 2014-08-23 15:03:02

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
9
répondu Michael R. Hines 2014-07-12 14:38:58

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
5
répondu Jakub Czaplicki 2013-03-13 13:50:52

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.

2
répondu Lloyd Dominic 2016-11-26 02:24:19

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';

screenStatetrue(écran ), ou false(écran ).

1
répondu Toni Almeida 2017-05-23 11:47:29

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
1
répondu Swapan Chhabra 2016-02-01 07:35:27

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
0
répondu Victor Rendina 2017-06-24 21:58:51