android - generador - marcacion por pulsos
Enviando tonos DTMF sobre el enlace ascendente en la llamada (3)
En pocas palabras, no podrá hacerlo sin personalizar al menos la aplicación Teléfono, que debe ejecutarse como usuario del sistema para acceder al módem. Para hacer esto, tienes que rootear tu teléfono.
Para cumplir con sus requisitos, la única solución posible es mejorar la plataforma Android. Hicimos exactamente eso y ya enviamos nuestros parches al proyecto AOSP:
https://android-review.googlesource.com/32820
https://android-review.googlesource.com/32821
Actualmente estamos esperando que los desarrolladores de Google revisen y acepten nuestra contribución. Si está interesado, infórmeselo a Google en las distintas listas de AOSP (android-contrib, android-platform). Esperemos que agilice la revisión.
Saludos cordiales, Gergely
Estoy trabajando en un proyecto que requiere que mi aplicación pueda enviar tonos DTMF en la frecuencia del enlace ascendente de la voz durante una llamada activa.
Mis 2 condiciones son:
- No utilizamos una plataforma Android personalizada.
- No necesitamos rootear el teléfono.
He pasado varios días haciendo mi tarea y soy consciente de que el envío de DTMF durante la llamada no es compatible con el SDK actual / API estándar. Sin embargo, al usar las clases relevantes en com.android.internal.telephony
, espero imitar cómo la aplicación nativa de Phone hace esto. Seguí este sitio sobre cómo utilizar las API internas para aplicaciones de terceros estándar .
También me configuré con el entorno de desarrollo de Android OS y puedo ejecutar la aplicación Teléfono en modo de depuración en un emulador para determinar su funcionamiento interno.
Probé varias formas en un emulador estándar de valores, pero los errores que obtuve fueron:
Después de intentar instalar una aplicación renombrada basada en la fuente de Phone.apk usando el identificador de usuario compartido de android.uid.phone, obtuve:
Error de instalación: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
Sin duda debido al hecho de que no tengo el certificado del sistema para firmarlo.
Después de intentar escribir una aplicación personalizada basada en el código de envío de tono DTMF relevante de la fuente de Phone.apk, recibo el siguiente error al configurar PhoneFactory;
java.lang.SecurityException: Denegación de permiso: no está permitido enviar difusión android.provider.Telephony.SPN_STRINGS_UPDATED.
Sin duda debido a que mi aplicación no tiene los permisos correctos, aunque AndroidManifest.xml está configurado con los mismos permisos que Phone.apk.
Estoy en una pérdida en cuanto a qué otra cosa podría intentar. ¿Alguien tiene alguna sugerencia?
Gracias de antemano, Simon.
Has tomado un enfoque interesante y elogio tus esfuerzos. Desafortunadamente, hay algunos privilegios internos reservados (evidentemente, como SPN_STRINGS_UPDATED
) que no está permitido usar como desarrollador de aplicaciones, lo que más o menos rompe este enfoque. Podría intentar eliminar el área de código que causa esto, pero estoy bastante seguro de que se encontrará con un problema de bloqueo.
Por lo tanto, me temo que esto no es posible en este momento. Hay una solicitud de función abierta en Android para enviar tonos DTMF a través de una llamada telefónica existente, pero ha estado inactiva allí durante casi dos años.
Entiendo que esto no resuelve su problema, pero tenga en cuenta que puede enviar tonos DTMF directamente después de marcar un número:
Intent i = new Intent("android.intent.action.CALL",
Uri.parse("tel://" + number + "," + dtmfTones));
No puede enviar tonos DTMF durante una llamada activa, pero puede enviarlos cuando los "programa" cuando inicia la llamada. Consulte la siguiente publicación: https://.com/a/12986066/475472