«

»

Nov 14

Как обрабатывать нажатия hardware-кнопок на java в android

Добавляем этот сниппет в нашу activity и наше приложение для android сможет обрабатывать нажатия hardware-кнопок так как мы того пожелаем. В данном примере используется обработчик для нажатия кнопки “вызова” (KeyEvent.KEYCODE_HEADSETHOOK) на handsfree гарнитуре.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
        super.onKeyUp(keyCode, event);
        if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK)
        {
                // ADD HERE YOUR CODE TO PROCESS PARTICULAR KEY-PRESS EVENT
                return true; //because you handle this event
        }
        return false; // allow to system handle it
}

Если вы не знаете кода кнопки для которой хотите написать обработчик – переопределите функцию onKeyDown таким образом чтобы она выводила код нажатой кнопки и всегда возвращала false:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
        super.onKeyUp(keyCode, event);
        Log.i("KEY CODE ","PRESSED KEY - "+keyCode);
        return false; // allow to system handle it
}

5 comments

Skip to comment form

  1. Bettie

    With the bases loaded you struck us out with that asnewr!

  2. Sapfil

    Почти не надеюсь, что кто-то ответит в топике двухгодовалой давности, но все же…

    Пробовал получать коды кнопок на Samsung Galaxy Ace. “Меню” или “назад” обрабатывается нормально, выдается их код. А вот центральная (не сенсорная кнопка) – никак не обрабатывается. И ее нажатие не перехватывается. Я бы хотел ее обработать, потому что если этого не сделать, то по ее нажатию моя игра ставится на паузу и остается висеть в памяти и жрать батарейку.

    1. admin

      А если минимальную апликуху запустить, которая только код кнопок выводит – то же самое?
      Выглядит будто какая-то сторонняя активити нажатие проглатывает. В логкате событий по поводу нажатий отображаются?

  3. Igor

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

    1. admin

      да, конечно 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>