Куда поместить код для прослушивателя глобального аппаратного ключа?

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

.method public onKeyDown(ILandroid/view/KeyEvent;)Z

Если я хочу, чтобы приложение прослушивало аппаратные ключи "глобально" (т. е. в каждом действии, окне, что у вас есть, приложения), куда мне следует поместить код onKeyDown? Включаю ли я его в одно действие (если да, то в какое), во все действия или вообще куда-то еще?

Редактировать: я понимаю, что «глобально» здесь немного двусмысленно. Я имею в виду во всем приложении, а не в системе.


person Protector one    schedule 06.08.2013    source источник
comment
Наша собственная компания balpha недавно опубликовала полезную информацию о слушателях в Android. Прокрутите до раздела «Распространение событий»: balpha.de/2013/07/   -  person Dave Swersky    schedule 06.08.2013
comment
Это, безусловно, полезная информация, хотя я недостаточно уверен, чтобы предположить, что ключевые события распространяются так же, как события касания.   -  person Protector one    schedule 06.08.2013


Ответы (1)


Если я хочу, чтобы приложение прослушивало аппаратные ключи «глобально» (т.е. в каждом действии, окне, что у вас есть, приложения), где я должен поместить код onKeyDown?

Вы загружаете исходный код Android, модифицируете его, чтобы иметь какой-то глобальный аппаратный обработчик ключей, компилируете измененный исходный код, упаковываете его в мод ПЗУ и устанавливаете мод ПЗУ на свое устройство.

В противном случае только активность переднего плана (или, иногда, окно) будет получать ключевые события.

person CommonsWare    schedule 06.08.2013
comment
О, но это нормально! Я хочу, чтобы это было глобально для приложения, и рассматриваемое приложение не работает в фоновом режиме. - person Protector one; 06.08.2013
comment
@Protectorone: для приложения не существует концепции глобальной обработки аппаратных ключей. Следовательно, либо вы модифицируете Android, либо регистрируете свои обработчики для каждого действия (или для каждого окна). - person CommonsWare; 06.08.2013
comment
Нет какой-то мастер-активности, которая могла бы перехватывать ключи во всем приложении? Мне действительно нужно помещать его в каждое действие и окно? - person Protector one; 06.08.2013
comment
@Protectorone: нет какой-то основной активности, которая могла бы перехватывать ключи во всем приложении? -- правильный. Мне действительно нужно помещать его в каждое действие и окно? -- правильный. Теперь, если бы вы были фактическим автором приложения, вы могли бы использовать наследование или вспомогательные методы или что-то еще, чтобы минимизировать количество избыточного кода. - person CommonsWare; 06.08.2013
comment
Что ж, это интересный момент! Кто сказал, что создатель этого приложения еще не сделал этого? Если все действия в нем унаследованы от основного действия/окна, будет ли достаточно поместить туда код? - person Protector one; 06.08.2013
comment
@Protectorone: достаточно ли поместить туда код? - на это невозможно ответить абстрактно, извините. - person CommonsWare; 06.08.2013