Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo puedo interceptar pulsaciones de botón en el auricular en Android?

He estudiado la intención ACTION_MEDIA_BUTTON y estoy tratando de usarlo e interceptar las pulsaciones de botón y presentarlos en la pantalla con un brindis. Registré el receptor para interceptar dos intentos:

  1. ACTION_HEADSET_PLUG – conectar el auricular

  2. ACTION_MEDIA_BUTTON – recepción de las pulsaciones del botón

Esto se hace en mi actividad principal:

  IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); mediaFilter.setPriority(10000); registerReceiver(_receiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG)); registerReceiver(_receiver, mediaFilter); 

Esta es la parte del receptor que maneja las pulsaciones de botón:

  if (action.equals(Intent.ACTION_HEADSET_PLUG)) { Toast.makeText(context, "earphones activity",Toast.LENGTH_SHORT).show(); if (intent.getExtras().getInt("state")==1)//if plugged Toast.makeText(context, "earphones plugged",Toast.LENGTH_LONG).show(); else Toast.makeText(context, "earphones un-plugged",Toast.LENGTH_LONG).show(); } else if (action.equals(Intent.ACTION_MEDIA_BUTTON)) { Toast.makeText(context, "button pressed",Toast.LENGTH_LONG).show(); key=intent.getExtras().getString("EXTRA_KEY_EVENT"); Toast.makeText(context, key,Toast.LENGTH_LONG).show(); } 

Ahora la parte que maneja el auricular plug-in y la eliminación funciona bien, pero la parte que interceptar el botón de prensa no lo es.

¿Hay alguna razón el código que maneja el ACTION_MEDIA_BUTTON no funciona?

¿Hay un permiso especial que necesito para interceptar tal intención?

Estoy usando un Samsung Galaxy S2 para probar el código.

He mirado todos los postes similares y he intentado todo. Desafortunadamente nada parece funcionar.

  • BroadcastReceiver onReceive activado cuando se registra
  • Transmisión de Android del servicio a la actividad
  • Android: receptor de la difusión para la pantalla encendido y pantalla apagado
  • Inicio del servicio desde BroadcastReceiver
  • Excepción extraña de "Receptor no registrado"
  • Android BroadcastReceiver en el inicio - sigue funcionando cuando la actividad está en segundo plano
  • QueryBroadcastReceivers no encuentra los receptores registrados con registerReceiver
  • Registrar programáticamente un receptor de difusión
  • 3 Solutions collect form web for “¿Cómo puedo interceptar pulsaciones de botón en el auricular en Android?”

    Hace poco desarrollé una aplicación que respondió al botón multimedia. Lo probé en el Samsung Galaxy S II, y funcionó.

    En primer lugar, en su AndroidManifest.xml , dentro del área <application> , coloque lo siguiente:

     <!-- Broadcast Receivers --> <receiver android:name="net.work.box.controller.receivers.RemoteControlReceiver" > <intent-filter android:priority="1000000000000000" > <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> 

    A continuación, cree un BroadcastReceiver en un archivo diferente:

     public class RemoteControlReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction()) { KeyEvent event = (KeyEvent) intent .getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event == null) { return; } if (event.getAction() == KeyEvent.ACTION_DOWN) { context.sendBroadcast(new Intent(Intents.ACTION_PLAYER_PAUSE)); } } } } 

    Esto probablemente no es la mejor solución por ahí (especialmente el hard coded android:priority above). Sin embargo, probó un par de otras técnicas y ninguno de ellos parecía funcionar. Así que tengo que recurrir a este … Espero haber ayudado.

    Gracias por contribuir.

    Para todos los otros que luchan aquí son las conclusiones finales:

    Después de un montón de lágrimas de sangre finalmente me di cuenta de que hay dos tipos de emisiones que puedo interceptar: algunos como ACTION_HEADSET_PLUG están obligados a registrarse en el código de actividades.

    Otros como ACTION_MEDIA_BUTTON deben estar registrados en el archivo Manifest.

    En este ejemplo para interceptar ambas intenciones necesitamos hacer ambas cosas.

    Establecer en el código y en el archivo de manifiesto.

     if (Intent.ACTION_MEDIA_BUTTON.equals(action)) { if (intent.hasExtra(Intent.EXTRA_KEY_EVENT)) { String key = intent.getStringExtra(Intent.EXTRA_KEY_EVENT); toast("Button "+key+" was pressed"); } else toast("Some button was pressed"); } 

    Este código de retorno Toast "botón nulo fue presionado"

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.