ウェイクアップする方法Android with adb-私は(眠っている場合)ウェイクアップしたい)Androidアプリケーションのすべての新しいバージョンをデバッグする前にターミナル。
一般的なフローは次のとおりです。1. Eclipseでいくつかの変更を行います。 2.その間、画面がオフになるかどうか。 3.「デバッグ」を実行して、強制的に画面を起動させたい。
「電源キー」エミュレーションを備えたメソッドを見つけましたが、オンにせず、電源状態を切り替えます。アプリケーションにコードを追加したくありません。そのような些細な仕事をする他の方法は何ですか、助けてください。
adb Shell input keyevent KEYCODE_WAKEUP
here で説明したように、これによりデバイスがウェイクアップします。 KEYCODE_POWERのように動作しますが、デバイスがすでに起動している場合は効果がありません。
1つのコマンドでスリープ/スリープ解除を切り替えるには、次のコマンドを発行できます
adb Shell input keyevent KEYCODE_POWER
ただ使用する:
adb Shell input keyevent 26
これが私が思いついたものです:
adb Shell dumpsys power | grep "mScreenOn=true" | xargs -0 test -z && adb Shell input keyevent 26
これにより、最初に画面がオンになっているかどうかが確認されます。そうでない場合は、電源キーをエミュレートして、デバイスの画面をオンにします。
dumpsys power
コマンドでadbを介してデバイスの現在の電源状態(ディスプレイを含む)を確認し、ディスプレイがオフの場合にのみ電源キーを押すイベントを送信できます。より簡単な解決策は、開発者オプションで「USBに接続している間」に表示タイムアウトを完全に無効にすることです。
adb Shell input keyevent KEYCODE_POWER
とKilled
を取得した場合は、前にsu
を実行してrootユーザーを使用する必要があります。
睡眠:(adb Shell) input keyevent KEYCODE_SLEEP
目を覚ます:(adb Shell) input keyevent KEYCODE_WAKEUP
トグル:(adb Shell) input keyevent KEYCODE_POWER
メインアクティビティのonCreate()
に次のフラグを追加することもできます。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
これにより、Eclipseを介してデバイスにロードされたときに、デバイスがウェイクアップします。
WindowsおよびEclipseの場合、.batファイルを使用できます。
@ECHO OFF
setlocal
for /f "delims= tokens=1*" %%a in ('adb Shell dumpsys power ^| findstr.exe "mScreenOn="') DO (
for /f "delims== tokens=2*" %%S in ("%%a") do (
if "%%S" == "false" (goto move1) else (goto move2)
)
)
:move1
adb Shell input keyevent 26
goto end
:move2
goto end
:end
exit
それがチェックされ、画面がオフの場合、電源状態を切り替えます。 Eclipseで使用するには、この.batファイルを「外部ツール」として使用し(.batへのパスを入力するだけ)、そのプロパティでプロジェクトにリンクする必要があります(ビルダー-インポート-)。
自動テスト用にリモートデバイスをウェイクアップするには、以下を使用しました。画面がオンになっていない場合は、電源ボタンを押してからメニューボタンを押します。
(
cd ${platform-tools};
./adb Shell dumpsys power | grep -i 'SCREEN_ON' >/dev/null;
if [ $? -eq 0 ]; then
echo "Screen is on...";
else
echo "Pressing buttons to wake-up...";
# http://developer.Android.com/reference/Android/view/KeyEvent.html
./adb Shell input keyevent 26; # Power
./adb Shell input keyevent 82; # Menu
echo "Pausing for state to settle...";
sleep 1;
./adb Shell dumpsys power | grep -i 'SCREEN_ON';
fi;
echo '---';
./adb Shell dumpsys power | grep -i 'SCREEN'
)
これはOPが要求したものと反対であることは知っていますが、他の読者のために「本当に眠っている」の定義を指摘したかったのです。adbがアクティブな場合、USBがオンでコマンドプロンプトが実行されています(adb Shellは他にどのように機能しますか?)。完全にスリープ状態になると、物理的な電源ボタンのみがそれをウェイクアップします(BSPでウェイクソースとして他のボタンが選択されている場合を除く)。私のプロジェクトでは、画面をオフにした状態で約120mAを消費していますが、スリープモードでは23maしかありません(USBケーブルを取り外します)。 「adb Shell input keyevent 26」は、このモードでは機能しません。シリアルコンソールも同様です。テストフィクスチャは、バッテリーと外部電源ラインに別々にアクセスできます。バッテリーを接続した状態で電源ラインを切り替えて、ウェイクアップできます。また、テストのスリープ部分のためにUSBを切断するスイッチUSBハブもあります。
これが誰かの助けになることを願っています。