Compatible con aplicaciones de llamadas de terceros,Compatible con aplicaciones de llamadas de terceros,Compatible con aplicaciones de llamadas de terceros

Android 9 proporciona API para admitir mejor aplicaciones de llamadas de terceros (3P). Las aplicaciones de llamadas 3P generalmente dependen de API de telefonía, como la transmisión PHONE_STATE para coexistir con las llamadas telefónicas del operador. Como consecuencia, las aplicaciones de llamadas 3P deben dar prioridad a las llamadas del operador y, a menudo, recurren a rechazar silenciosamente las llamadas entrantes en la aplicación o a finalizar una llamada en curso para dar paso a una llamada del operador.

Las API de Android 9 admiten escenarios de llamadas simultáneas entre aplicaciones 3P y llamadas de operadores. Esto permite, por ejemplo, recibir una llamada 3P entrante mientras se está realizando 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 recomienda que las aplicaciones de llamadas 3P implementen la API ConnectionService autoadministrada. Para obtener más información sobre cómo crear una aplicación de llamadas usando 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 ). Según 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 (por ejemplo, cómo la aplicación de marcador AOSP cumple con este requisito, consulte Entradas del 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.

Manejar 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 de SuperCaller) que no admite retención y el usuario recibe una llamada móvil (por ejemplo, a través de su proveedor FooCom), su aplicación Marcador/Teléfono debe indicarle al usuario que debe responder. la llamada de red móvil finalizará la llamada 3P en curso.

Esta experiencia del usuario es importante ya que una aplicación de llamadas 3P puede tener una llamada en curso que el marco no puede retener. Responder una nueva llamada móvil provoca que se desconecte la llamada 3P en curso.

Vea la interfaz de usuario a continuación para ver un ejemplo:

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

Su aplicación de marcador puede verificar si una llamada entrante provoca que se desconecte otra llamada verificando los extras de llamada . Asegúrese de que EXTRA_ANSWERING_DROPS_FG_CALL esté configurado en TRUE y EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME esté configurado en el nombre de la aplicación cuya llamada se desconecta al responder la llamada móvil entrante.

Entradas del registro de llamadas de aplicaciones de llamadas 3P

Los desarrolladores de aplicaciones de llamadas 3P pueden optar por que las llamadas de 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 redes móviles.

Cuando la aplicación de marcador AOSP muestra 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 del registro de llamadas con la aplicación de llamadas 3P
Figura 2. Entrada del registro de llamadas con el nombre de la aplicación de llamadas 3P en la aplicación de marcador

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, utilice la aplicación de prueba Telecomm, que implementa la API ConnectionService autoadministrada. 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 la compilación apk usando adb install -g -r <apk path> . Luego se agrega un ícono de muestra autoadministrada a su iniciador.

  3. Toque el icono para abrir la aplicación de prueba.

Manejar 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, cuya llamada se desconectará.
  5. Cuando haya terminado, toque el botón DESCONECTAR en la aplicación de prueba.

Entradas del 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 desde aplicaciones de llamadas 3P, abra su aplicación de marcador y confirme que la llamada aparece en el registro de llamadas del sistema.