BroadcastReceiver dla ACTION_MEDIA_BUTTON nie działa
Piszę aplikację na Androida dla wersji 4.0.3 (ICS) systemu operacyjnego Android. Problem polega na tym, że nie otrzymuję danych wyjściowych z mojego Log.d () w metodzie onReceive () BroadcastReceiver, co oznacza, że moja aplikacja nie obsługuje poprawnie transmisji.
Przeczytałem niezliczone pytania dotyczące sposobu uruchamiania kodu po kliknięciu ACTION_MEDIA_BUTTON. Mam nawet kopię + wklejony kod, gdy mój nie działał, tylko aby sprawdzić, czy zadziała.
ACTION_MEDIA_BUTTON, który chcę obsługiwać, topojedynczy przycisk na słuchawkach, który pozwala użytkownikowi odbierać / kończyć połączenia, odtwarzać / wstrzymywać muzykę.Zamiast mojej aplikacji obsługującej ten przycisk, gdy go klikam, zapasowy odtwarzacz muzyki na moim Nexusie S Android rozpoczyna odtwarzanie utworu.
Nie umieściłem mojego kodu w innej klasie, może dlatego nie działa?
Oto kod znaleziony w metodzie onCreate () (ten konkretny kod skopiowałem ze strony internetowej po tym, jak kod, który napisałem, nie działał):
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);
Wszystko, czego naprawdę potrzebuję do przetestowania, to KEYCODE_HEADSETHOOK, ale nie zaszkodzi mieć tam inny kod do testowania, naprawię go, gdy wszystko będzie działać poprawnie.
W moim manifeście:
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
Początkowo uważałem, że może to być problem z uprawnieniami, ponieważ nie określiłem żadnych uprawnień do tego, jednak nie otrzymałem żadnego komunikatu o błędzie.
Jak powiedziałem wcześniej, próbowałem wielu odmian tego. Jednym z przykładów było użycie kodu pod tym linkiemnadawca transmisji onReceive problem ACTION_MEDIA_BUTTON Android z poprawkami CommonsWare. Ponownie jednak zmodyfikowałem go, aby nie był w osobnej klasie.
Z góry dziękuję za pomoc.