2012-12-12 43 views
41

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

私はAPKでディスプレイをロックする方法を見つけましたが、タイムアウトを待たずにディスプレイタイムアウトをシミュレートするために、ADBを介してPCからスクリーンをロックしたいと思います。

これは可能ですか?画面のロックが解除されている場合は、画面をロックし

adb shell input keyevent 26 

おかげで、

+0

ロック/アンロックは電源オフ/オンと同じですか?それは電源オフ/オンとして私のために働く。 – ransh

答えて

62

クール ダイアンは、私はちょうど26送信することにより、それが動作しますので、

あるKEYCODE_POWERを見つけました。画面がすでにロックされている場合は、デバイスを起動します。

私は、画面がロックされていることを確認する唯一の方法は、ロックを解除することです(keyevent 82(メニュー)を使用して電源ボタンのキーイベントでロックすることです)。本当ですか?

+0

それは素晴らしいです、私はWindowsデスクトップ上のバッチファイルとして配置し、ショートカットキーを追加しました。 – AVEbrahimi

+0

悲しいことに、それはcubietruckの電源をオフにして、デバイスをオフにするだけです。 –

+0

これは素晴らしいことです。私は逆に同じ問題を抱えていました。使用しているデバイスがスリープ状態になり、ハードキーがないため、いつもリセットする必要がありました。これで、起床(「電源」ボタンを押す)のようなものです。ありがとう。 – CJBS

5

あなたは既に解決策を見つけたが、私はとにかく参考のためにここにこのコードを入れます。あなたは何ができるか

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

ここにあります単純な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 
+1

mPowerStateはintではない可能性があります。 Samsung Galaxy SIIIでは、次の行が表示されます。 mPowerState = SCREEN_BRIGHT_BIT SCREEN_ON_BIT –

+0

@Jakub:お返事ありがとうございます!申し訳ありませんが、に気付くまでに私はずっと時間がかかりました。私は、ほとんどの場合、Perlスクリプトからadbコマンドといくつかのシェルスクリプトを使用して作業しています。しかし、私はこの種のものをもっと必要としたときに、これをパワーのための参考文献に載せるつもりです。 – PurpleDiane

+0

@Juuso:それは知ってよかった、ありがとう。私はテスト用の電話機で作業するので、違った形で表示される可能性があることを知っておくとよいでしょう。 – PurpleDiane

1

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オフスクリーンあります。

8

はここで画面が上か実際にあるかどうかを確認してからをウェイクアップし、ワンショットで画面ロックを解除する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 
14

マイケル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 
+0

なぜロック解除の方法を提案していますか?OPがデバイスをロックしたいとき – KurtCobain

+0

あなたは間違いなしです。私は何とかこの部分を逃した。私はその後、必要な変更を反映するようにスクリプトを変更しました。ありがとう@KurtCobain – Rescue9

+0

タッチスクリーンは私の電話ではコマンドではありませんモトローラRazrそれはちょうど "タッチスクリーンのスワイプ"ではない "スワイプ"でなければなりません – JPM

1

次のコマンドを使用して表示をトリガーすることができます。 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 
1

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

adb shell input keyevent 26は、画面をロックします。
このコマンドをもう一度実行すると、画面がオフ/ロックされている間は、オン/ロック解除されます。
adb shell input keyevent 26も画面のロックを解除します(画面がロックされている場合)。

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

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

0

これは、ロリポップ前のデバイスを含め、接続されているすべてのデバイスの画面をオン/オフするためのスクリプトです。私は接続された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 
関連する問題