En mi aplicación emitir la siguiente declaración:¿Qué es AudioFlinger y por qué falla TONE_PROP_ACK?
toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);
que funciona muy bien en un LS670 barato LG con Android 2.3.3, pero no suena en absoluto en todos los otros teléfonos que tengo, que van desde Android 2.2 .1 a Android 2.3.4.
Así que sé que la versión del sistema operativo no juega un papel aquí (también verifiqué en la documentación que ha sido compatible desde la API 1).
Además, tanto el volumen del timbre y el volumen de los medios de comunicación se configuran al máximo y toneGenerator se inicializa con:
toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100);
Y comprobaron que Settings.System.DTMF_TONE_WHEN_DIALING
toma el valor 1
Desconcertado por este comportamiento inconsistente (a través diferentes teléfonos), examiné los registros del sistema cuando esto sucede y la única diferencia sospechosa que he podido encontrar es que los teléfonos que fallan para que suenen TONE_PROP_ACK
tienen esta línea en su registro:
AudioFlinger setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121
¿Cuál es el propósito de AudioFlinger y cuál podría ser su conexión al silenciamiento TONE_PROP_ACK
?
Cualquier idea cómo arreglar mi código para que ese TONE_PROP_ACK suene siempre, independientemente del modelo de teléfono?
Audio flinger es el componente del sistema que gestiona el audio de la aplicación de usuario android antes de entregarlo al controlador del kernel. ¿Puedes obtener sonido de cualquiera de las funciones de tono? ¿Viste la parte en los documentos de la API sobre el enrutamiento de audio siendo variable? De todos modos, ¿qué intentas lograr realmente? Sabes que estos tonos no pasan por el enlace ascendente de la llamada, ¿verdad? –
@ChrisStratton Sí, sé que estos tonos no pasan por el enlace de llamada. En realidad, este es mi comportamiento preferido ya que solo estoy tratando de dar una señal audible (no tiene que ser DTMF). Puedo obtener sonido de las funciones de tono cuando uso la actividad de marcado del teléfono. ¿Puede explicar más detalladamente que "el enrutamiento de audio es variable"? ¿Dónde encuentro esa parte en los documentos API? La URL directa sería genial. Gracias +1. –
'routing = 0' for' io 25' significa que AudioFlinger le está diciendo a un flujo de audio en particular (supongo que un AudioStreamOut en este caso) que debe enrutar a "en ninguna parte". Cómo manejará el audio HAL que es específico de la implementación, por lo que podría, p. deje el enrutamiento para ese flujo sin cambios. – Michael