Android: прослушивание нажатия клавиши питания

В настоящее время я пытаюсь слушать, когда нажата кнопка питания. В конечном счете, я хотел бы, чтобы некоторый код запускался, когда кнопка питания дважды нажата, чтобы проверить, заблокирован или разблокирован экран. В настоящее время у меня есть это:

  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);//prevent phone from being locked
}

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_POWER:
        {
            Toast.makeText(getBaseContext(), "Power button pressed", Toast.LENGTH_LONG).show();

            return true;
        }
        case KeyEvent.KEYCODE_MENU:
            Toast.makeText(getBaseContext(), "Menu Button Pressed", Toast.LENGTH_LONG).show();

            return true;
    }
    return super.onKeyDown(keyCode, event);
}

Код отлично работает для тоста для меню keyevent, но ничего не делает для события power key. Любые идеи?

Ответ 1

Хотя я не смог захватить аппаратный ключ, я понял, что клавиша питания была нажата, используя широковещательный приемник, который слушает, выключен или выключен экран. Я использовал:

            if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
                    //do something 
            }

            else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
                    //do something else
            }

Я был уверен, что кнопка питания нажата, имея счет, который будет истекать через пару секунд. Таким образом, я могу нажать кнопку питания три раза, чтобы обеспечить правильное поведение.

Ответ 3

Я использовал андроидные аннотации Аннотации @Receiver.

Добавьте это в свою аннотированную @Activity активность:

@Receiver(actions = Intent.ACTION_SCREEN_OFF)
protected void onPowerButtonPressed() {
// add your code
}