Android - прослушиватель нажатия жестких клавиш в фоновом режиме

Android предоставляет несколько методов обратного вызова, которые помогают нам обрабатывать ключевые события внутри приложений. Но что, если я хочу прослушивать ключевые события, когда мое приложение работает в фоновом режиме? Например. Я хочу прослушать событие длительного нажатия на кнопку поиска, чтобы выполнить специальную функцию.


person Nguyen Minh Binh    schedule 09.10.2012    source источник


Ответы (1)


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

Но с помощью службы вы можете найти обходной путь. Вы можете создать службу, которая реагирует на события нажатия аппаратных клавиш, зарегистрировав BroadcastReceiver. Например, в музыкальном приложении AOSP у них есть служба (MediaPlaybackService), который реагирует на события клавиш громкости, регистрируя BroadcastReceiver (MediaButtonIntentReceiver).

Вот код, где он регистрирует приемник:

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
ComponentName rec = new ComponentName(getPackageName(),
        MediaButtonIntentReceiver.class.getName());
mAudioManager.registerMediaButtonEventReceiver(rec);

Это работает, даже если приложение «Музыка» не находится на переднем плане. Фрагмент кода из этого ответа.

person Anup Cowkur    schedule 09.10.2012
comment
Это возможно только для клавиш громкости или есть способ сделать это для произвольных аппаратных клавиш? - person ngu; 14.01.2016
comment
На самом деле, это не работает с клавишами громкости и большинством клавиш. MediaButtonIntentReceiver ограничен получением нескольких ключевых событий, таких как: KEYCODE_MEDIA_STOP, KEYCODE_MEDIA_NEXT и т. д. - person Gordon; 31.08.2017