Compatibilidad con aplicaciones de llamadas de terceros

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 de 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:

Llamada entrante desconectando una llamada 3P en curso
Figura 1. Llamada entrante que desconecta una llamada 3P en curso

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:

Entrada de registro de llamadas con la aplicación de llamadas 3P
Figura 2. Entrada de registro de llamadas con el nombre de la aplicación de llamadas 3P en la aplicación de marcació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 a 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 de 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/ .

  1. Cree la aplicación de prueba desde la raíz de su repositorio fuente de Android usando:

    mmma packages/services/Telecomm/testapps/

  2. Instale el apk de compilación usando adb install -g -r <apk path> . Luego se agrega un ícono de muestra autogestionada a su lanzador.

  3. 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.

Aplicación de prueba para aplicaciones de llamadas 3P
Figura 3. Aplicación de prueba con implementaciones de muestra de la API ConnectionService autoadministrada
  1. Desmarque la opción Sostenible .
  2. Toque SALIENTE para iniciar una nueva llamada saliente de muestra.
  3. Toque el botón ACTIVO para activar la llamada.
  4. 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.
  5. 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.