Sto scrivendo un'applicazione Android per la versione 4.0.3 (ICS) del sistema operativo Android. Il problema è che non ricevo l'output dal mio Log.d() nel metodo onReceive() di BroadcastReceiver, il che significa che la mia applicazione non gestisce correttamente la trasmissione.BroadcastReceiver per ACTION_MEDIA_BUTTON non funziona
Ho letto innumerevoli domande su come eseguire il codice quando si fa clic su ACTION_MEDIA_BUTTON. Ho persino copiato + codice incollato quando il mio non ha funzionato, solo per vedere se avrebbe funzionato.
L'ACTION_MEDIA_BUTTON che voglio gestire è il pulsante singolo su auricolari che permettono a un utente di chiamate pick-up/fine, play/pausa musica. Invece della mia applicazione che gestisce questo pulsante, quando clicco su di esso, il lettore di musica in stock sul mio Nexus S Android inizia a riprodurre un brano.
Non ho inserito il mio codice in un'altra classe, forse questo è il motivo per cui non funziona?
Ecco il codice trovato sul metodo onCreate() (questo codice specifico ho copiato fuori un sito web dopo il codice che ho scritto non ha funzionato):
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);
Tutto quello che ho davvero bisogno di verificare è la KEYCODE_HEADSETHOOK ma non fa male avere l'altro codice lì per il test, lo aggiusterò una volta che posso far funzionare tutto correttamente.
Nel mio manifesto:
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
Originariamente ho pensato che questo potrebbe essere un problema di autorizzazioni dal momento che non ha specificato alcuna autorizzazioni per questo però non ho ricevuto alcun messaggio di errore.
Come ho detto prima, ho provato molte varianti di questo. Un esempio è stato l'uso del codice a questo collegamento broadcastreceiver onReceive problem ACTION_MEDIA_BUTTON Android con le correzioni di CommonsWare. Di nuovo, tuttavia, l'ho modificato in modo che non fosse in una classe separata.
Grazie in anticipo per il vostro aiuto.
Si prega di controllare [questo] (http://stackoverflow.com/questions/3369554/how-to-handle-long-press-media-button-in-order-to -launch-attività) e [questo] (http://stackoverflow.com/questions/6603170/broadcastreceiver-onreceive-problem-action-media-button-android) Spero che questo risolverà il vostro problema – silwar
ho quasi lo stesso codice di te e funziona perfettamente su Android 2.2/2.3. Ma come te non posso farlo funzionare con ICS ... – user1026605
Lo stesso qui. Funziona prima di Android 4.0. L'API è cambiata o qualcosa del genere. – joepetrakovich