Android предоставляет несколько методов обратного вызова, которые помогают нам обрабатывать ключевые события внутри приложений. Но что, если я хочу прослушивать ключевые события, когда мое приложение работает в фоновом режиме? Например. Я хочу прослушать событие длительного нажатия на кнопку поиска, чтобы выполнить специальную функцию.
Android - прослушиватель нажатия жестких клавиш в фоновом режиме
Ответы (1)
KeyEvents могут обрабатываться только действиями, поскольку они являются интерфейсом для пользователя, нажимающего клавиши, и только тогда, когда они находятся на переднем плане. Даже службы, работающие в фоновом режиме, не предназначены для реагирования на действия пользователя.
Но с помощью службы вы можете найти обходной путь. Вы можете создать службу, которая реагирует на события нажатия аппаратных клавиш, зарегистрировав BroadcastReceiver. Например, в музыкальном приложении AOSP у них есть служба (MediaPlaybackService), который реагирует на события клавиш громкости, регистрируя BroadcastReceiver (MediaButtonIntentReceiver).
Вот код, где он регистрирует приемник:
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
ComponentName rec = new ComponentName(getPackageName(),
MediaButtonIntentReceiver.class.getName());
mAudioManager.registerMediaButtonEventReceiver(rec);
Это работает, даже если приложение «Музыка» не находится на переднем плане. Фрагмент кода из этого ответа.