Botón de captura de medios en Android> = 4.0 (funciona en 2.3)

Escribí algún servicio que utiliza BroadcastReceiver para capturar uno de los botones de medios ("botón de reproducción" de un auricular), y funciona perfectamente en Android 2.3.x (HTC Nexus One o HTC Desire)

Cuando intenté ejecutar en Android 4.0.3 (Samsung Nexus S) no funciona (mi aplicación no recibe intención "android.intent.action.MEDIA_BUTTON" y "play" se comporta como de costumbre: stops / starts música).

Contenido del manifiesto:

... <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name=".buttonreceiver.MediaButtonIntentReceiver" > <intent-filter android:priority="10000" > <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> ... 

¿Hay manera de hacerlo funcionar en android 4.0.3


Editar: He intentado la solución propuesta, he añadido la acción y lo ejecuto, pero mi receptor todavía no recibe la intención. Lo que es más extraño registrar el receptor por código tampoco funciona:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.about_and_activation_view); Log.d("MR", "onCreate - " + getIntent().getAction()); mReceiver = new MediaButtonIntentReceiver(); registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_MEDIA_BUTTON)); } 

Ahora estoy totalmente confundido.

2 Solutions collect form web for “Botón de captura de medios en Android> = 4.0 (funciona en 2.3)”

Asegúrese de que tiene una actividad en su aplicación y de que el usuario ejecuta esta actividad antes de intentar pulsar ese botón. Hasta entonces, su <receiver> no recibirá ninguna emisión .


ACTUALIZAR

En Android 4.0 o superior, parece que también es necesario llamar a registerMediaButtonEventReceiver() en AudioManager para recibir los eventos. Ese estado se mantendrá hasta que algo más lo llame registerMediaButtonEventReceiver() o hasta que llame unregisterMediaButtonEventReceiver() .

Por ejemplo, una actividad como esta:

 public class MediaButtonActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName( this, MediaButtonReceiver.class)); } } 

Habilitará un MediaButtonReceiver registrado en el registro para obtener eventos ACTION_MEDIA_BUTTON.

Si solo desea que su aplicación sea la predeterminada pero no necesite hacer nada con el botón presiona puede usar el siguiente método.

Agregue esto al archivo de manifiesto (en el nodo "Aplicación"):

  <receiver android:name="BroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> 

Agregue esto a onCreate () en la actividad principal o en cualquier lugar que desee cuando se ejecute la aplicación. También podría ser útil en el evento onResume ():

  mAudioManager = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE); mRemoteControlResponder = new ComponentName(getActivity().getPackageName(), BroadcastReceiver.class.getCanonicalName()); mAudioManager.registerMediaButtonEventReceiver(mRemoteControlResponder); 
  • WidgetProvider Los extras de intención enviados con el botón de clic no se encuentran en onReceive
  • Bloquear Auth0 para android no devolver UserProfile en la autenticación
  • Android: errores de difusión no ordenados con GCM
  • ¿No puedo recibir la emisión en el cambio de estado de la batería?
  • Llamada AsyncTask desde receptor de difusión Android
  • ¿Por qué no hay instrumentación de prueba para BroadcastReceiver?
  • El receptor de difusión no funciona en ICS si la aplicación no se inicia al menos una vez
  • BroadcastReceiver no funciona después de BOOT_COMPLETED
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.