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. Error al cargar la biblioteca nativa 'libnative-platform.so' para Linux amd64
  3. SearchView on support.v7.appcompat problema de la biblioteca: el fondo de 9 parches predeterminado no se procesa correctamente
  4. Android: ¿Cómo detectar el doble toque?
  5. Cambiar al modo horizontal en el emulador de Android
  6. Convertir aplicaciones iPhone / iPad en Android
  7. ¿Cuál es la manera más clara de nombrar recursos en Android?
  8. 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.

  • Android PhoneGap para abrir una nueva actividad
  • Emulador Android Wear y modo ambiente
  • OAuth y esquema personalizado resultan en un "ERR_UNKNOWN_URL_SCHEME" en Chrome
  • Registro de GCM con dos identificadores de registro de trabajo diferentes
  • Divisores / separadores de filas android gridview
  • Error de base de datos no definido en phonegap android?
  • 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.