sirven samsung para los hacer funcionar earpods cualquier configurar conectar como celular audifonos android bluetooth android-bluetooth

samsung - Cómo capturar eventos clave de los auriculares bluetooth con Android



los audifonos de iphone 7 sirven para cualquier celular (3)

Mi aplicación puede ser controlada por un auricular normal. Simplemente anula "onKeyDown". Pero los eventos clave de los auriculares bluetooth no se capturan, ¿por qué? ¿O cómo capturar eventos clave de bluetooth?

el "log cat" muestra lo siguiente si presiono el botón del auricular:

Bluetooth AT recv(3043): AT+VGS=15 AudioPolicyManagerBase(13654): FM radio recording off AudioService(2261): sendVolumeUpdate, isKeyguardLocked...Not to update Volume Panel. VolumePanel(2261): change volume by MSG_VOLUME_CHANGED VolumePanel(2261): onVolumeChanged(streamType: 6, flags: 0) VolumePanel(2261): Call setChangeSeekbarColor(false)

También intenté manejar las acciones de los botones multimedia, pero esto no funciona. Mi idea es una asignación de teclas configurable gratuita: el usuario elige "establecer tecla" y mi aplicación escucha en todas las teclas (hardware, botones multimedia, auriculares bluetooth), luego el usuario presiona una tecla y el código de evento / clave se almacena en la configuración.

Summerizing no funciona Respuestas: los botones de volumen deben capturarse con "VOLUME_CHANGED_ACTION". El problema es que estos intentos se transmiten a otras aplicaciones y abortBroadcast () no funciona (solo funciona para transmisiones "ordenadas"). Otro problema es que las teclas en los auriculares con cable y en el teléfono activan onReceive () dos veces (¿por qué?) Los auriculares Bluetooth lo activan una vez. El siguiente problema es la tercera tecla en los auriculares Bluetooth. Activa el comando de voz (s-voice comienza en s3), traté de capturar muchos intentos diferentes con respecto a esto, pero no puedo "recibir" este botón presionando y no sé por qué. Al final, quiero capturar todo tipo de botones y no quiero que sean manejados por otras aplicaciones (como usar onKeyDown y devolver el valor verdadero).


Agrega un oyente de difusión a MEDIA_BUTTON :

<intent-filter android:priority="<some number>"> <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter>

Debe registrar su receptor de difusión dentro de su aplicación (no en el archivo de manifiesto). De lo contrario, el reproductor de música de Google capturará su transmisión y la abordará.

Su prioridad de IntentFilter debería ser más alta que las prioridades de otros reproductores de medios en su teléfono)

Agregue el permiso android.permission.BLUETOOTH en el manifiesto para admitir los auriculares Bluetooth

Después de recibir su clave, debe cancelar manualmente la transmisión usando abortBroadcast() .

Sin embargo, las prioridades y abortBroadcast() funcionan bien siempre y cuando cada aplicación solo responda mientras, por ejemplo, se reproduzca algo. Pero varios usuarios también esperan que se inicie (o comience a jugar) un "jugador predeterminado" al presionar un botón, como el jugador predeterminado, por lo que puede suceder que algunas aplicaciones con un número de prioridad más alto no permitan que la intención llegue a su aplicación.

En el onReceive , puede obtener el evento de botón con

KeyEvent key = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);

key.getKeyAction() le dice si se soltó o presionó el botón, key.getKeyCode() le dice qué botón se presionó.

Si también desea manejar auriculares de cable de un solo botón, también KEYCODE_HEADSETHOOK cuenta el código de clave KEYCODE_HEADSETHOOK

Reemplace el método onKeyDown en cualquier actividad y verifique el KeyEvent.KEYCODE_MEDIA_KEYCODE_pressed_key

p.ej

boolean onKeyDown(int keyCode, KeyEvent event) { AudibleReadyPlayer abc; switch (keyCode) { case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: // code for fast forward return true; case KeyEvent.KEYCODE_MEDIA_NEXT: // code for next return true; case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: // code for play/pause return true; case KeyEvent.KEYCODE_MEDIA_PREVIOUS: // code for previous return true; case KeyEvent.KEYCODE_MEDIA_REWIND: // code for rewind return true; case KeyEvent.KEYCODE_MEDIA_STOP: // code for stop return true; } return false; }

Ejemplo de integración de teclas de volumen Android - Botones de volumen utilizados en mi aplicación
Este puede necesitar permiso

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />


O puedes probar implementaciones más pequeñas en el siguiente enlace

Blog del desarrollador de Android: manejo de los botones del control remoto
Cuentos de Android: agregue el soporte del botón del auricular a su aplicación de Android


Echa un vistazo a este artículo . Explica cómo implementar algo similar utilizando las acciones de los botones multimedia.

Sé que mencionó que caminó de esta manera sin éxito, aún así inténtelo. Dirija su atención a los errores relacionados con el registro del receptor de difusión, el establecimiento de prioridades de filtro de intención y la adición de permisos (todo se explica en el artículo).

Espero que esto ayude.


Si está intentando escuchar esto de una actividad, use onKeyDown() y capture los eventos clave KEYCODE_MEDIA_PLAY_PAUSE ( KEYCODE_MEDIA_PLAY y KEYCODE_MEDIA_PAUSE post ICS).

También para que la solución de receptor de difusión funcione, asegúrese de que no haya otras aplicaciones instaladas y ejecutándose en segundo plano que detecten estos eventos que podrían tener prioridad sobre los suyos.

También vea esto: Android: registrar un botón del auricular con BroadcastReceiver