これは少しトリッキーです。
背景: 電源ボタンがうまく機能しない古い GalaxyNexus があります。画面のオン/オフを切り替えるために強く押す必要があり、これは非常に面倒です!
解決策: 最新の AOSP をダウンロードし、独自のファームウェア イメージをビルドしました。この問題を処理するために 2 つの場所を変更しました。
1- PhoneWindowManager の関数 interruptKeyBeforeQueueing() で、次の処理コードを追加します。
if(keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
if(event.getAction() == KeyEvent.ACTION_UP && !mPowerManager.isScreenOn()) {
return ACTION_WAKE_UP;
}
}
2- ステータスバーのソースコードで、ホームボタン長押し時のコールバックを修正しました。Googleアシスタントをトリガーして画面をオフにすることから変更しました(Googleへの謝罪)。SearchPanelView の関数 onTrigger() で、次のようにコードを変更しました。
//startAssistActivity();
vibrate();
PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
if(pm.isScreenOn()) {
pm.goToSleep(SystemClock.uptimeMillis());
}
アシスト アクティビティを起動する元のコードをコメント アウトし、画面をオフにするコードを追加しました。
結果: 正常に動作しているようです。
- ホームボタンを長押ししてスライドで画面オフ
- 音量+/-ボタンを押して画面をオンにします
しかし、ロック画面を無効にすると何か異常です。画面ロックが NONE に設定されていて、ホームボタンを長押ししてスライドして画面をオフにした場合、画面をオンにした後、音量キーまたは電源キーを介してタッチしても、UI は反応しません。もう一度ホームを押さない限り。検索パネル ビューがまだ残っていて、タッチ イベントを乗っ取っているようです。
また、ステータス バーのコードを次のように変更しようとしました。
mBar.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_SEARCH_PANEL);
Slog.i(TAG, "onTrigger: post message to turn off screen after 100ms.");
v.postDelayed(new Runnable() {
@Override
public void run() {
PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
if(pm.isScreenOn()) {
pm.goToSleep(SystemClock.uptimeMillis());
}
}
}, 100);
しかし、問題は残ります。この問題は、「ホームを長押しして上にスライド」アクションを使用して画面をオフにするシナリオでのみ発生します。これは、PowerManager.gotoSleep() メソッドを使用することを意味します。ここに欠けているものはありますか?追加の処理を行う必要がありますか?
ヒントやインスピレーションをくれる人はいますか?どうもありがとう!