53

ADB 経由で Android 画面をロックする方法はありますか?

apk でディスプレイをロックする方法を見つけましたが、ADB を介して PC から画面をロックし、タイムアウトを待たずにディスプレイのタイムアウトをシミュレートしたいと考えています。

これを行うことは可能ですか?

ありがとう、ダイアン

4

8 に答える 8

78

KEYCODE_POWERかっこいい、 26であることがわかりました。

したがって、次を送信することで機能します。

adb shell input keyevent 26

画面のロックが解除されている場合、画面がロックされます。画面がすでにロックされている場合は、デバイスをウェイクアップします。

私の推測では、画面がロック(オフ)されていることを確認する唯一の方法は、ロックを解除することです(keyevent 82(メニュー)を使用してから、電源ボタンのkeyeventでロックします。これが本当かどうか誰かが知っていますか?

于 2012-12-12T23:44:14.860 に答える
17

Michael R. Hines は、間違いなく最も簡単な解決策を示しました。ただし、次の行は Android の以降のバージョンでは役に立ちません。

adb shell input keyevent 82 # unlock

ウェイクしたい個々のデバイス (タブレット) の座標を使用して、シェル スクリプトを更新しました。私のタブレットはロック画面イベントの向きの変更をサポートしていないため、ロック画面が常に横向きであるため、値は常に機能します。向きの変化の検出が必要な場合は、単純な if/then/else で、向きに使用する正しい座標を選択するだけで十分です。

#!/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
于 2014-07-20T14:58:47.717 に答える
6

あなたはすでに解決策を見つけていますが、参考のためにこのコードをここに置いておきます。

あなたができることは、イベントを挿入して電源ボタンを2回「押す」ことです。デバイスの状態 (ディスプレイのオン/オフ) がわからない場合は、画面が現在オンかオフかを確認し、それに応じて電源ボタンを押します。

これは簡単な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
于 2013-03-13T13:50:52.690 に答える
5

前の回答に加えて、adbを使用して画面をロック/ロック解除するために私が行うことは次のとおりです。

adb shell input keyevent 26画面をロックします。
そのため、再度そのコマンドを実行すると、画面がオフ/ロックされているときに、オン/ロック解除されます。
adb shell input keyevent 26また、画面のロックを解除します (画面がロックされている場合)。

さらに、 などのすべてのコマンドもテストしたところ、デバイスのロックも解除adb shell input keyevent numberされることがわかりました。adb shell input keyevent 3

キー 3 がホーム ボタンであることも (テストによって) わかりました。そのため、物理的なホーム ボタン (画面上のソフト ホーム ボタンではない) がある場合は、これを使用してデバイスのロックを解除することもできます。

于 2016-11-26T02:24:19.480 に答える
1

以前のバージョンの Android (少なくとも 4.2+)を使用しdumpsys powerている場合は、出力が異なります。@Jakub Czaplickiからの回答として
使用する代わりに、を使用しました。mPowerState=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 (画面オン)またはfalse (画面オフ)です。

于 2014-04-02T11:41:30.320 に答える
1

You can use following command to trigger display ON. adb shell input keyevent POWER

I tried and am using in my project, Hope it will work for you.

And here is the ruby code I used:

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
于 2016-02-01T07:15:25.673 に答える