既存の回答では完全に質問に答えず、詳細な調査をせずにはうまくいかないほどの詳細は除外しています。私はこれを解決することを学んだことを分かち合うつもりです。
あなたがマニフェストファイルに次の権限を追加する必要があります:まず、短期および長期プレスを処理するために
<uses-permission android:name="android.permission.PREVENT_POWER_KEY" />
は、あなたの活動のクラスに次のオーバーライドを追加します。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_POWER) {
// Do something here...
event.startTracking(); // Needed to track long presses
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_POWER) {
// Do something here...
return true;
}
return super.onKeyLongPress(keyCode, event);
}
注:それはあります価値があることに気づく価値がありますonKeyLongPress
の前にonKeyDown()
が複数回起動するので、onKeyUp()
または他のロジックをトリガーして、一連のonKeyDown()
コールがユーザの行動であることを防ぐことができますそれを押さえている。
この次の部分はCyanogenmodのみです。 PREVENT_POWER_KEY定数が定義されていない場合は、それを必要としません。
getWindow().clearFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);
あなたは切り替えることができます:電源キーを傍受停止する
getWindow().addFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);
(標準機能を許可):
は、あなたがあなたの活動から、次のフラグを設定する必要があり、電源キーを傍受開始するには必要に応じて、プログラム内で2つのモードの間を前後に繰り返します。
参照:あなたの応答のための https://stackoverflow.com/a/10365166/2724418
感謝。しかし、あなたの答えは、アクティビティが実行されている場合にのみ機能します。私の必要条件は、バックグラウンドサービスのみが実行されている場合です。 – hal0360