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:
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:
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/
.
Cree la aplicación de prueba desde la raíz de su repositorio fuente de Android usando:
mmma packages/services/Telecomm/testapps/
Instale la compilación apk usando
adb install -g -r <apk path>
. Luego se agrega un ícono de muestra autoadministrada a su iniciador.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.
- 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, cuya llamada se desconectará.
- 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.