Я пишу приложение Android для версии 4.0.3 (ICS) для ОС Android. Проблема в том, что я не получаю вывод из своего Log.d() в методе onReceive() BroadcastReceiver, что означает, что мое приложение неправильно обрабатывает широковещательную передачу.
Я прочитал бесчисленные вопросы о том, как запускать код при нажатии ACTION_MEDIA_BUTTON. Я даже копировал + вставлял код, когда мой не работал, просто чтобы убедиться, что это сработает.
ACTION_MEDIA_BUTTON Я хочу обрабатывать кнопку single на наушниках, которые позволяют пользователю выбирать/завершать вызовы, воспроизводить/приостанавливать музыку. Вместо того, чтобы мое приложение обрабатывало эту кнопку, когда я нажимаю на нее, музыкальный плеер на моем Nexus S Android начинает воспроизводить песню.
Я не размещал свой код в другом классе, возможно, поэтому он не работает?
Здесь код, найденный в методе onCreate() (этот код, который я скопировал с веб-сайта после того, как код, который я написал, не работал):
IntentFilter mediaButtonFilter = new IntentFilter(
Intent.ACTION_MEDIA_BUTTON);
mediaButtonFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
BroadcastReceiver brMediaButton = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
Log.d("Event", "Media button!");
this.abortBroadcast();
KeyEvent key = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if(key.getAction() == KeyEvent.ACTION_UP) {
int keycode = key.getKeyCode();
if(keycode == KeyEvent.KEYCODE_MEDIA_NEXT) {
Log.d("TestApp", "Next Pressed");
} else if(keycode == KeyEvent.KEYCODE_MEDIA_PREVIOUS) {
Log.d("TestApp", "Previous pressed");
} else if(keycode == KeyEvent.KEYCODE_HEADSETHOOK) {
Log.d("TestApp", "Head Set Hook pressed");
}
}
}
};
registerReceiver(brMediaButton, mediaButtonFilter);
Все, что мне действительно нужно проверить, это KEYCODE_HEADSETHOOK, но мне не больно иметь другой код для тестирования, я исправлю его, как только я смогу все правильно работать.
В моем манифесте:
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
Я изначально думал, что это может быть проблема с правами доступа, поскольку я не указал никаких разрешений для этого, однако я не получил сообщение об ошибке.
Как я уже говорил ранее, я пробовал много вариантов этого. Одним из примеров было использование кода по этой ссылке broadcastreceiver onReceive problem ACTION_MEDIA_BUTTON Android с исправлениями CommonsWare. Опять же, я изменил его, чтобы он не был в отдельном классе.
Заранее благодарим вас за помощь.