ADB経由でAndroid画面をロックする方法はありますか?
Apkでディスプレイをロックする方法を見つけましたが、ADBを介してPCから画面をロックして、タイムアウトを待つことなくディスプレイタイムアウトをシミュレートしたいと思います。
これを行うことは可能ですか?
ありがとう、ダイアン
かっこいい、ただ見つけたKEYCODE_POWER
は26です。
以下を送信することで動作します:
adb Shell input keyevent 26
画面のロックが解除されると画面がロックされます。画面がすでにロックされている場合、デバイスを起動します。
私の推測では、画面がロック(オフ)されていることを確認する唯一の方法は、ロックを解除(keyevent 82(メニュー)を使用してから、電源ボタンkeyeventでロックすることです。
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
画面が実際にオンかどうかを確認してから目を覚ますandで画面を一度にロック解除する1つの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 keyevent 82 # unlock
echo "OK, should be on now."
else
echo "Screen is already on."
fi
解決策は既に見つかりましたが、とにかく参照用にこのコードをここに配置します。
あなたができることは、電源ボタンを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
以前の回答に加えて、adbを使用して画面をロック/ロック解除するために行うことは次のとおりです。
adb Shell input keyevent 26
は画面をロックします。
したがって、そのコマンドを再度実行すると、画面がオフ/ロックされている間に、オン/ロック解除されます。adb Shell input keyevent 26
は、画面のロックも解除します(画面がロックされている場合)。
さらに、adb Shell input keyevent number
などのすべてのコマンドもテストしましたが、adb Shell input keyevent 3
もデバイスのロックを解除することがわかりました。
また、(テストにより)キー3がホームボタンであることもわかりました。したがって、物理的なホームボタン(画面上のソフトホームボタンではない)がある場合は、これを使用してデバイスのロックを解除することもできます。
次のコマンドを使用して、表示オンをトリガーできます。 adb Shell input keyevent POWER
私は私のプロジェクトで試し、使用しています。それがあなたのために働くことを願っています。
そして、これは私が使用したRubyコードです:
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
以前のバージョンの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';
screenState
はtrue
(screenon)、またはfalse
(screenoff)。
以下は、Lollipop以前のデバイスを含む、接続されているすべてのデバイスの画面をオンまたはオフにするスクリプトです。接続済みのAndroidテストを実行する直前にJenkinsサーバーでこれを使用して、デバイスの準備ができていることを確認します。
#!/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