MediaButtonIntentReceiver no funciona en Android 4.0+

El objetivo es interceptar emisiones de los auriculares, así como bluetooth eventualmente, para responder a diferentes tipos de clics desde el auricular para alterar el reproductor multimedia. Esta solución funciona correctamente para todas las versiones anteriores a ICS. He aquí algunos de los códigos y cosas que he probado:

.... private BroadcastReceiver mediaButtonReceiver = new MediaButtonIntentReceiver(); .... public void onCreate() { ... IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); mediaFilter.setPriority(2147483647); // this is bad...I know this.registerReceiver(mediaButtonReceiver, mediaFilter); ... } public class MediaButtonIntentReceiver extends BroadcastReceiver { private KeyEvent event; public MediaButtonIntentReceiver() { super(); } @Override public void onReceive(Context context, Intent intent) { String intentAction = intent.getAction(); if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { return; } event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event == null) { return; } try { int action = event.getAction(); switch(action) { case KeyEvent.ACTION_UP : Log.d("TEST", "BUTTON UP"); break; case KeyEvent.ACTION_DOWN : case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE : Log.d("TEST", "BUTTON DOWN"); break; } } catch (Exception e) { Log.d("TEST", "THIS IS NOT GOOD"); } abortBroadcast(); } } 

Para tratar de hacer que esto funcione, suena como 4.0 + requiere algo como esto que no funcionó:

 ((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(this, MediaButtonIntentReceiver.class)); 

Incluso traté de añadirlo al manifiesto, además de lo anterior:

  <receiver android:name=".MediaButtonIntentReceiver" android:enabled="true"> <intent-filter android:priority="2147483647" > <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> 

Todavía no hay suerte. ¿Que me estoy perdiendo aqui? Es ciertamente un 4.0 + / ICS / JellyBean cuestión … Esto se está haciendo en un servicio, no una actividad.

Parece que su receptor de difusión es una clase interna para su servicio? Si es así, haga que su receptor de difusión esté estático y en el manifiesto haga lo siguiente:

 <receiver android:name="MyOuterClass$MediaButtonIntentReceiver" android:enabled="true"> <intent-filter android:priority="2147483647" > <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> 

En Android 3.0 + debe utilizar registerMediaButtonEventReceiver para registrar el receptor. Esto utiliza el AndroidManifest para el IntentFilter. La razón por la que funciona en 2.x es porque lo está registrando con this.registerReceiver() que registró el receptor sin el AndroidManifest.

Sólo probar jalea en esto está funcionando para mí:

  broadcastReceiver = new BroadcastReceiver() {//global BroadcastReceiver @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals("android.intent.action.MEDIA_BUTTON")){ Log.e("test", "ok"); } }; 

Intención:

  IntentFilter intentfilterTime = null; intentfilterTime = new IntentFilter(); intentfilterTime.addAction("android.intent.action.MEDIA_BUTTON"); registerReceiver(broadcastReceiver, intentfilterTime); 

Prueba de servicio con el botón de medios de Widgetsoid (que emulan los botones de medios BT). Todo está funcionando.

  • Los archivos mp3 de baja calidad no se reproducen correctamente como se esperaba
  • URL de MediaPlayer para Android con Cookie
  • Android MediaPlayer sincroniza con animación como iOS AVPlayer y capa AVSynchronized
  • Aplicación de streaming de radio en línea para Android
  • ¿Puede Android MediaPlayer reproducir audio en un archivo comprimido?
  • ¿Cómo puedo crear un reproductor multimedia personalizado para reproducir un códec personalizado en Android?
  • ¿Cómo se incluyen los encabezados http con MediaPlayer setDataSource?
  • Jugar dos sonidos Simutaneosly
  • UDP Video Streaming en Android
  • Surafce ha sido liberado error
  • Cómo reproducir un archivo cifrado en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.