Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Implementando IMS

Android 9 introduce una nueva interfaz llamada SystemApi ImsService para ayudar a implementar el Subsistema Multimedia IP (IMS). La API ImsService es una interfaz bien definida entre la plataforma Android y una implementación de IMS proporcionada por un proveedor o un operador.

Descripción general de ImsService

Figura 1. Descripción general ImsService

Al utilizar la interfaz ImsService, el implementador de IMS puede proporcionar información de señalización importante a la plataforma, como información de registro de IMS, integración de SMS sobre IMS e integración de funciones de MmTel para proporcionar llamadas de voz y video. La API de ImsService también es una API del sistema Android, lo que significa que se puede compilar directamente contra el SDK de Android en lugar de contra la fuente. Una aplicación IMS que se ha preinstalado en el dispositivo también se puede configurar para que sea actualizable en Play Store.

Ejemplos y fuente

Android proporciona una aplicación en AOSP que implementa partes de la API ImsService con fines de prueba y desarrollo. Puede encontrar la aplicación en / testapps / ImsTestService .

Puede encontrar la documentación de la API ImsService en ImsService y en las demás clases de la API.

Implementación

La API de ImsService es una API de alto nivel que le permite implementar IMS de muchas formas, según el hardware disponible. Por ejemplo, la implementación cambia dependiendo de si la implementación de IMS está completamente en el procesador de la aplicación o si está parcial o totalmente descargada al módem. Android no proporciona una HAL pública para descargar al procesador de banda base, por lo que cualquier descarga debe ocurrir usando su extensión HAL al módem.

Compatibilidad con implementaciones de IMS más antiguas

Aunque Android 9 incluye la API ImsService, los dispositivos que utilizan una implementación anterior para IMS no pueden admitir la API. Para estos dispositivos, las interfaces de mayor edad AIDL y clases de contenedor se han trasladado a la android.telephony.ims.compat espacio de nombres. Al actualizar a Android 9, los dispositivos más antiguos deben hacer lo siguiente para continuar con la compatibilidad con la API anterior.

  • Cambiar el espacio de nombres de la aplicación ImsService para extenderse desde el android.telephony.ims.compat API de espacio de nombres.
  • Modificar la definición del servicio ImsService en AndroidManifest.xml utilizar el android.telephony.ims.compat.ImsService acción-filtro de intención, en lugar de la android.telephony.ims.ImsService acción.

El marco se unirá entonces a la ImsService utilizando la capa de compatibilidad proporcionada en Android 9 al trabajo con el legado ImsService aplicación.

Registro de ImsService con el marco

La API de ImsService se implementa como un servicio, al que se une el marco de Android para comunicarse con la implementación de IMS. Se necesitan tres pasos para registrar una aplicación que implementa un ImsService con el marco. En primer lugar, la aplicación ImsService debe registrarse con la plataforma mediante el AndroidManifest.xml de la solicitud; en segundo lugar, debe definir qué características de IMS admite la implementación (MmTel o RCS); y tercero, debe verificarse como la implementación de IMS confiable, ya sea en la configuración del operador o en la superposición del dispositivo.

Definición de servicio

La aplicación IMS registra un ImsService con el marco mediante la adición de un service entrada en el manifiesto con el siguiente formato:

<service
    android:name="com.egcorp.ims.EgImsService"
    android:directBootAware="true"
    Android:persistent="true"
    ...
    android:permission="android.permission.BIND_IMS_SERVICE" >
    ...
    <intent-filter>
        <action android:name="android.telephony.ims.ImsService" />
    </intent-filter>
</service>

El service definición en AndroidManifest.xml define los siguientes atributos, que son necesarios para su correcto funcionamiento:

  • directBootAware="true" : permite que el servicio a ser descubierto y administrado por telephony antes de que el usuario desbloquea el dispositivo. El servicio no puede dispositivo de acceso encriptado de almacenamiento antes de que el usuario desbloquea el dispositivo. Para obtener más información, consulte el modo de arranque de apoyo directo y cifrado basado en archivos .
  • persistent="true" : Permite a este servicio que se ejecute de manera persistente y no se mató por el sistema de recuperación de la memoria. Este atributo SOLO funciona si la aplicación está construida como una aplicación del sistema.
  • permission="android.permission.BIND_IMS_SERVICE" : asegura que sólo un proceso que ha tenido el BIND_IMS_SERVICE permiso concedido a él se puede unir a la aplicación. Esto evita que una aplicación maliciosa se vincule al servicio, ya que el marco solo puede otorgar el permiso a las aplicaciones del sistema.

El servicio también debe especificar el intent-filter elemento con la acción android.telephony.ims.ImsService . Esto permite que el marco para encontrar el ImsService .

Especificación de funciones de IMS

Una vez que ImsService se ha definido como un servicio de Android en AndroidManifest.xml, ImsService debe definir las características de IMS que admite. Actualmente, Android admite las funciones MmTel y RCS, sin embargo, solo MmTel está integrado en el marco. Aunque no hay API de RCS integradas en el marco, aún existen ventajas al declararlo como una característica del ImsService.

A continuación se presentan las características válidos se definen en android.telephony.ims.ImsFeature que un ImsService y puede proporcionar una explicación y ejemplo de por qué una aplicación IMS querría implementar una o todas estas características. Después de definir cada función, esta página se describen cómo el ImsService declara el conjunto de características que se define para cada ranura SIM.

FEATURE_MMTEL

Los ImsService implementa la función SIV MMTEL, que contiene el soporte para todos los medios de IMS (IR.92 y IR.94 especificaciones) con excepción de emergencia se unen al IMS PDN para llamadas de emergencia. Cualquier aplicación de ImsService que desea apoyar las características MMTEL debería ampliar el android.telephony.ims.MmTelFeature clase base y volver una costumbre MmTelFeature aplicación en ImsService#createMmTelFeature .

FEATURE_EMERGENCY_MMTEL

Declarar esta función solo indica a la plataforma que es posible una conexión de emergencia al IMS PDN para servicios de emergencia. Si esta función no se ha declarado para su ImsService , la plataforma siempre será por defecto del interruptor de circuito de retorno para servicios de emergencia. El FEATURE_MMTEL función debe definirse para que esta función puede definir.

FEATURE_RCS

La API ImsService no implementa funciones de IMS RCS, pero el android.telephony.ims.RcsFeature clase base puede seguir siendo útil. El marco se une automáticamente a la ImsService y llama ImsService#createRcsFeature cuando detecta que el paquete debe proporcionar RCS. Si se retira la tarjeta SIM asociada con el servicio de RCS, el marco llama automáticamente RcsFeature#onFeatureRemoved y luego limpia el ImsService asociado con la función de RCS. Esta funcionalidad puede eliminar parte de la lógica de vinculación / detección personalizada que una función RCS tendría que proporcionar de otro modo.

Registro de funciones compatibles

Los primeros se une a la telefonía marco ImsService para consultar las características que admite el uso de la ImsService#querySupportedImsFeatures API. Después de que los calcula marco donde se encuentran el ImsService apoyarán, se llamará ImsService#create[...]Feature para cada función que el ImsService será responsable de. Si las características que los soportes de aplicación IMS cambios, puede utilizar ImsService#onUpdateSupportedImsFeatures para señalar el marco para volver a calcular las funciones compatibles. Consulte el diagrama a continuación para obtener más información sobre la inicialización y el enlace del ImsService.

Inicialización y enlace de ImsService

Figura 2: inicialización ImsService y vinculante

Detección y verificación del marco de una implementación de ImsService

Una vez que ImsService se ha definido correctamente en AndroidManifest.xml, la plataforma debe configurarse para enlazarse (de forma segura) con ImsService cuando sea apropiado. Hay dos tipos de ImsServices a los que se vincula el marco:

  1. Carrier "override" ImsService: Estos ImsServices están precargados en el dispositivo, pero están conectados a uno o más proveedores de telefonía celular y solo se vincularán cuando se inserte una tarjeta SIM correspondiente. Esto se configura usando el
  2. ImsService "predeterminado" del dispositivo: este es el ImsService predeterminado que un OEM carga en el dispositivo y debe estar diseñado para proporcionar servicios IMS en todas las situaciones en las que un ImsService no está disponible y es útil en situaciones en las que el dispositivo no tiene tarjeta SIM insertada o la tarjeta SIM insertada no tiene un operador ImsService instalado. Esto se define en la superposición del dispositivo mediante las siguientes configuraciones:

Android no admite aplicaciones con implementaciones de ImsService descargables de terceros, por lo que cualquier implementación de ImsService definida aquí debe ser una aplicación del sistema y debe residir en la carpeta / system / priv-app / o / product / priv-app / para otorgar la correspondiente permisos (es decir, permisos de teléfono, micrófono, ubicación, cámara y contactos). Al verificar si el nombre del paquete de la implementación de IMS coincide con los valores de superposición de dispositivo o CarrierConfig definidos anteriormente, solo se vinculan las aplicaciones preinstaladas de confianza.

Personalización

Las aplicaciones que implementan un ImsService solo están vinculadas a dispositivos en los que están configuradas como el operador "anula" ImsService o las configuraciones de ImsService "predeterminadas" del dispositivo para la funcionalidad MMTEL o RCS. El ImsService también permite que el IMS funciones que admite (MMTEL y RCS) para activar o desactivar a través de dinámicamente cambios utilizando el ImsService#onUpdateSupportedImsFeatures método. Esto activa el marco para volver a calcular qué ImsServices están vinculados y qué características admiten. Si la aplicación IMS actualiza el marco sin funciones compatibles, ImsService se desvinculará hasta que se reinicie el teléfono o se inserte una nueva tarjeta SIM que coincida con la aplicación IMS.

Prioridad de enlace para varios ImsService

El marco no puede admitir la vinculación a todos los ImsServices posibles que están precargados en el dispositivo y se vinculará a hasta dos ImsServices por ranura SIM (un ImsService para cada función) en el siguiente orden por función:

  1. El nombre del paquete ImsService definido por el valor CarrierConfig config_ims_[mmtel/rcs]_package_override_string cuando hay una tarjeta SIM insertada.
  2. El nombre del paquete ImsService definido en el valor de superposición dispositivo para config_ims_[mmtel/rcs]_package incluyendo el caso en el que no hay una tarjeta SIM insertada. Este ImsService DEBE admitir la función Emergency MmTel.

Debe tener el nombre del paquete de su ImsService definido en CarrierConfig para cada uno de los operadores que usarán ese paquete o en la superposición del dispositivo si su ImsService será el predeterminado, como se definió anteriormente.

Analicemos esto para cada función. Para un dispositivo (simple o multi-SIM) con una sola tarjeta SIM cargada, son posibles dos funciones de IMS: MMTel y RCS. El marco intentará vincularse en el orden definido anteriormente para cada función y si la función no está disponible para el ImsService definido en la anulación de la configuración del operador, el marco recurrirá a su ImsService predeterminado. Entonces, por ejemplo, la siguiente tabla describe qué característica de IMS usará el marco dadas tres aplicaciones de IMS que implementan ImsServices instaladas en un sistema con las siguientes características:

  • Carrier A ImsService admite RCS
  • Carrier B ImsService admite RCS y MMTel
  • OEM ImsService admite RCS y MMTel
Tarjeta SIM insertada Característica RCS Función MMTel
Transportista A Transportista A OEM
Transportista B Transportista B Transportista B
Sin SIM OEM OEM

Validación

Las herramientas para verificar la implementación del IMS en sí no están incluidas, ya que las especificaciones del IMS son extremadamente grandes y utilizan equipos de verificación especiales. Las pruebas solo pueden verificar que el marco de telefonía responde correctamente a la API de ImsService.