ADB経由でAndroid画面をロックする方法はありますか?ADB経由でAndroid画面をロックする方法は?
私はAPKでディスプレイをロックする方法を見つけましたが、タイムアウトを待たずにディスプレイタイムアウトをシミュレートするために、ADBを介してPCからスクリーンをロックしたいと思います。
これは可能ですか?画面のロックが解除されている場合は、画面をロックし
adb shell input keyevent 26
:
おかげで、
ADB経由でAndroid画面をロックする方法はありますか?ADB経由でAndroid画面をロックする方法は?
私はAPKでディスプレイをロックする方法を見つけましたが、タイムアウトを待たずにディスプレイタイムアウトをシミュレートするために、ADBを介してPCからスクリーンをロックしたいと思います。
これは可能ですか?画面のロックが解除されている場合は、画面をロックし
adb shell input keyevent 26
:
おかげで、
クール ダイアンは、私はちょうど26送信することにより、それが動作しますので、
あるKEYCODE_POWER
を見つけました。画面がすでにロックされている場合は、デバイスを起動します。
私は、画面がロックされていることを確認する唯一の方法は、ロックを解除することです(keyevent 82(メニュー)を使用して電源ボタンのキーイベントでロックすることです)。本当ですか?
それは素晴らしいです、私はWindowsデスクトップ上のバッチファイルとして配置し、ショートカットキーを追加しました。 – AVEbrahimi
悲しいことに、それはcubietruckの電源をオフにして、デバイスをオフにするだけです。 –
これは素晴らしいことです。私は逆に同じ問題を抱えていました。使用しているデバイスがスリープ状態になり、ハードキーがないため、いつもリセットする必要がありました。これで、起床(「電源」ボタンを押す)のようなものです。ありがとう。 – CJBS
あなたは既に解決策を見つけたが、私はとにかく参考のためにここにこのコードを入れます。あなたは何ができるか
は二回に「プレス」の電源ボタンイベントを注入することである。あなたの場合デバイスの状態(ディスプレイのオン/オフ)がわからない場合は、画面が現在オンかオフかを確認し、それに応じて電源ボタンを押してください。
ここにあります単純なmonkeyrunnerスクリプト:アンドロイド(少なくとも4.2以降)の以前のバージョンを使用してそれらのため
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
mPowerStateはintではない可能性があります。 Samsung Galaxy SIIIでは、次の行が表示されます。 mPowerState = SCREEN_BRIGHT_BIT SCREEN_ON_BIT –
@Jakub:お返事ありがとうございます!申し訳ありませんが、
@Juuso:それは知ってよかった、ありがとう。私はテスト用の電話機で作業するので、違った形で表示される可能性があることを知っておくとよいでしょう。 – PurpleDiane
、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';
true
screenState
(画面に)、又はfalse
(オフスクリーン)あります。
はここで画面が上か実際にあるかどうかを確認してからをウェイクアップし、ワンショットで画面ロックを解除する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
マイケルR.ハインズは与えました間違いなく最も簡単な解決策は何ですか?ただし、次の行は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
なぜロック解除の方法を提案していますか?OPがデバイスをロックしたいとき – KurtCobain
あなたは間違いなしです。私は何とかこの部分を逃した。私はその後、必要な変更を反映するようにスクリプトを変更しました。ありがとう@KurtCobain – Rescue9
タッチスクリーンは私の電話ではコマンドではありませんモトローラRazrそれはちょうど "タッチスクリーンのスワイプ"ではない "スワイプ"でなければなりません – JPM
次のコマンドを使用して表示をトリガーすることができます。 adbのシェル入力の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
前の回答に加えては、ここで私は、ADBを使用して、私の画面のロックを解除/ロックするために行うものです。
adb shell input keyevent 26
は、画面をロックします。
このコマンドをもう一度実行すると、画面がオフ/ロックされている間は、オン/ロック解除されます。
adb shell input keyevent 26
も画面のロックを解除します(画面がロックされている場合)。
また、adb shell input keyevent number
などのすべてのコマンドもテストして、adb shell input keyevent 3
もデバイスのロックを解除することがわかりました。
また、キー3がホームボタンであることがわかりました(テストによって)。したがって、物理ホームボタン(画面上のソフトホームボタンではありません)がある場合は、これを使用してデバイスのロックを解除することもできます。
これは、ロリポップ前のデバイスを含め、接続されているすべてのデバイスの画面をオン/オフするためのスクリプトです。私は接続された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
ロック/アンロックは電源オフ/オンと同じですか?それは電源オフ/オンとして私のために働く。 – ransh