Android: слушайте нажатие кнопки питания - PullRequest
3 голосов
/ 07 октября 2011

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

  @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);
}

Код прекрасно работает, чтобы выпить за событие ключа меню, но ничего не делает для события клавиши питания. Есть идеи?

Ответы [ 3 ]

7 голосов
/ 18 января 2012

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

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

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

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

2 голосов
/ 07 октября 2011

AFAIK, для клавиши Power это невозможно.

Возможно, вы захотите сослаться на этот ответ: http://groups.google.com/group/android-developers/browse_thread/thread/a4db4def1bdaa8d9

0 голосов
/ 24 июня 2016

Я использовал android-аннотации"@Receiver" аннотация.

Добавьте это к своей аннотированной активности @EActivity:

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