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