Android 9 proporciona API para admitir mejor las aplicaciones de llamadas de terceros (3P). Las aplicaciones de llamadas 3P generalmente se basan en las API de telefonía, como la transmisión PHONE_STATE
, para coexistir con las llamadas telefónicas de los operadores. Como consecuencia, las aplicaciones de llamadas 3P deben dar prioridad a las llamadas de los operadores y a menudo recurren a rechazar silenciosamente las llamadas entrantes en la aplicación o a terminar una llamada en curso para dar paso a una llamada del operador.
Las API en Android 9 admiten escenarios de llamadas simultáneas entre aplicaciones 3P y llamadas de operadores. Esto hace posible, por ejemplo, recibir una llamada 3P entrante mientras se está ocupado con una llamada de operador. El marco asume la responsabilidad de garantizar que la llamada del operador se mantenga cuando el usuario participa en la llamada 3P.
En Android 9, se alienta a las aplicaciones de llamadas 3P a implementar la API ConnectionService
autoadministrada. Para obtener más información sobre cómo crear una aplicación de llamadas con esta API, consulte Crear una aplicación de llamadas .
La API ConnectionService
autoadministrada también brinda a los desarrolladores la oportunidad de optar por que las llamadas en su aplicación se registren en el registro de llamadas del sistema (consulte EXTRA_LOG_SELF_MANAGED_CALLS
). De acuerdo con los requisitos del Documento de definición de compatibilidad de Android (CDD) (sección 7.4.1.2), debe asegurarse de que su aplicación de marcador/teléfono muestre estas entradas del registro de llamadas y muestre el nombre de la aplicación de llamadas 3P donde se originó la llamada (para ver un ejemplo de cómo la aplicación de marcación AOSP cumple con este requisito, consulte Entradas de registro de llamadas de aplicaciones de llamadas 3P ).
Las aplicaciones son responsables de configurar CAPABILITY_SUPPORT_HOLD
y CAPABILITY_HOLD
en las conexiones de sus aplicaciones. Sin embargo, es posible que una aplicación no pueda retener una llamada en algunas circunstancias. El marco incluye disposiciones para resolver este tipo de casos.
Escenarios
Debe modificar su aplicación de marcador para manejar los siguientes escenarios.
Manejo de llamadas entrantes que desconectan una llamada en curso
En un escenario en el que hay una llamada 3P en curso (por ejemplo, en una llamada SuperCaller) que no admite espera, y el usuario recibe una llamada móvil (por ejemplo, a través de su operador FooCom), su aplicación Marcador/Teléfono debe indicar al usuario que responder la llamada de la red móvil finalizará la llamada 3P en curso.
Esta experiencia de usuario es importante ya que una aplicación de llamadas 3P puede tener una llamada en curso que el marco no puede retener. Responder a una nueva llamada móvil hace que la llamada 3P en curso se desconecte.
Vea la interfaz de usuario a continuación para ver un ejemplo:
Su aplicación de marcación puede verificar si una llamada entrante hace que otra llamada se desconecte al verificar los extras de llamadas . Asegúrese de que EXTRA_ANSWERING_DROPS_FG_CALL
esté establecido en TRUE
y EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
esté establecido en el nombre de la aplicación cuya llamada se desconecta al responder la llamada móvil entrante.
Entradas de registro de llamadas de aplicaciones de llamadas 3P
Los desarrolladores de aplicaciones de llamadas 3P pueden optar por que las llamadas en su aplicación se registren en el registro de llamadas del sistema (consulte EXTRA_LOG_SELF_MANAGED_CALLS
). Esto significa que es posible tener entradas en el registro de llamadas que no sean para llamadas de red móvil.
Cuando la aplicación del marcador AOSP muestra las entradas del registro de llamadas relacionadas con una aplicación de llamadas 3P, el nombre de la aplicación donde se realizó la llamada se muestra en el registro de llamadas, como se ilustra a continuación:
Para determinar el nombre de una aplicación asociada con una entrada del registro de llamadas, use las columnas PHONE_ACCOUNT_COMPONENT_NAME
y PHONE_ACCOUNT_ID
en el proveedor del registro de llamadas para crear una instancia de PhoneAccountHandle
, que identifica el origen de una entrada del registro de llamadas. Consulte TelecomManager
para obtener los detalles de PhoneAccount.
Para determinar si una entrada del registro de llamadas proviene de una aplicación de llamadas 3P, verifique las capacidades PhoneAccount
para ver si CAPABILITY_SELF_MANAGED
está configurado.
El método getLabel
de la PhoneAccount
devuelta devuelve el nombre de la aplicación asociada con una entrada del registro de llamadas de la aplicación de llamadas 3P.
Validación
Para probar que su dispositivo admite aplicaciones de llamadas 3P, use la aplicación de prueba Telecomm, que implementa la API ConnectionService autogestionada. La aplicación se encuentra en /packages/services/Telecomm/testapps/
.
Cree la aplicación de prueba desde la raíz de su repositorio fuente de Android usando:
mmma packages/services/Telecomm/testapps/
Instale el apk de compilación usando
adb install -g -r <apk path>
. Luego se agrega un ícono de muestra autogestionada a su lanzador.Toque el icono para abrir la aplicación de prueba.
Manejo de llamadas entrantes que desconectan una llamada en curso
Siga estos pasos para verificar que una llamada entrante desconecte una llamada 3P en curso.
- Desmarque la opción Sostenible .
- Toque SALIENTE para iniciar una nueva llamada saliente de muestra.
- Toque el botón ACTIVO para activar la llamada.
- Llame al número de teléfono del dispositivo bajo prueba con otro teléfono. Esto invoca el escenario en el que a su marcador se le proporciona el nombre de una aplicación, a la que se le desconectará la llamada.
- Cuando haya terminado, toque el botón DESCONECTAR en la aplicación de prueba.
Entradas de registro de llamadas de aplicaciones de llamadas 3P
Después de completar los pasos anteriores, la aplicación de prueba debería haber registrado una llamada en el registro de llamadas del sistema. Para confirmar que el dispositivo registra llamadas de aplicaciones de llamadas 3P, abra su aplicación de marcador y confirme que la llamada aparece en el registro de llamadas del sistema.