Android 6.0 y superior incluyen una capacidad para que las aplicaciones privilegiadas proporcionen una configuración específica del operador a la plataforma. Esta funcionalidad, basada en los privilegios de operador de la UICC introducidos en Android 5.1 (Lollipop MR1), permite alejar la configuración del operador de las superposiciones de configuración estática y brinda a los operadores y OEM la capacidad de proporcionar dinámicamente la configuración del operador a la plataforma a través de una interfaz definida.
Una aplicación de operador debidamente firmada puede precargarse en la imagen del sistema, instalarse automáticamente o instalarse manualmente a través de una tienda de aplicaciones. La aplicación es consultada por la plataforma para proporcionar la configuración de ajustes que incluyen:
- Redes itinerantes/no itinerantes
- Buzón de voz visual
- Configuración de red SMS/MMS
- Configuraciones VoLTE/IMS
La determinación de qué valores devolver depende totalmente de la aplicación del operador y puede ser dinámica en función de la información detallada que se pasa a la aplicación a través de la plataforma.
Los beneficios clave de este enfoque son:
- Configuración dinámica : soporte para conceptos como configuración no derivada de MCCMNC, por ejemplo, operadores de redes virtuales móviles (MVNO) o la suscripción del cliente a servicios adicionales.
- Compatibilidad con dispositivos vendidos a través de cualquier canal : por ejemplo, un teléfono de mercado abierto se puede configurar automáticamente con la configuración correcta descargando una aplicación de una tienda de aplicaciones.
- Seguridad : el privilegio de proporcionar esta configuración se otorga solo a las aplicaciones firmadas por el operador.
- API definida : anteriormente, esta configuración se almacenaba principalmente en superposiciones XML internas dentro del marco y no a través de una API pública. La API de configuración del operador en Android 6.0 es pública y está bien definida.
Cómo funciona
Cargando la configuración
La configuración del operador proporcionada por esta característica es un conjunto de pares clave-valor que cambian varios comportamientos relacionados con la telefonía en la plataforma.
El conjunto de valores para un dispositivo en particular se determina consultando los siguientes componentes en orden:
- La aplicación del operador (esta es opcional, pero es la ubicación recomendada para una configuración adicional más allá de lo que existe en el Proyecto de código abierto de Android (AOSP))
- La aplicación de configuración de la plataforma incluida con la imagen del sistema
- Valores predeterminados, codificados en el marco (equivalente al comportamiento anterior a Android 6.0)
La aplicación de configuración de la plataforma
Se incluye una aplicación de configuración de plataforma genérica con la imagen del sistema. Esta aplicación puede proporcionar valores para cualquier variable que la aplicación del operador habitual no proporciona. La aplicación de configuración de la plataforma se puede encontrar (en Android 6.0) en: packages/apps/CarrierConfig
El propósito de esta aplicación es proporcionar alguna configuración por red cuando una aplicación de operador no está instalada, y los operadores/OEM deben realizar solo cambios mínimos en sus propias imágenes. En su lugar, los operadores deben proporcionar la aplicación del operador por separado para la personalización del operador, lo que permite que las actualizaciones se distribuyan a través de vías como las tiendas de aplicaciones.
Cómo se otorga el privilegio a una aplicación de operador
La aplicación del operador en cuestión debe estar firmada con el mismo certificado que se encuentra en la tarjeta SIM, como se documenta en Privilegios del operador de la UICC .
Qué información se pasa a la aplicación del operador
La aplicación del operador se proporciona con los siguientes valores, lo que le permite tomar una decisión dinámica sobre qué valores devolver:
- MCC
- multinacional
- SPN
- IMSI
- GID1
- GID2
- Identificación del transportista
Para obtener más información sobre la integración de ID de operadores, consulte Integración de ID de operadores con CarrierConfig .
Cuando se carga la configuración del operador
La construcción de la lista de pares de valores clave ocurre:
- Cuando se carga la tarjeta SIM (arranque o intercambio en caliente de SIM)
- Cuando la aplicación del operador activa manualmente una recarga
- Cuando la aplicación del operador se actualiza
Consulte la referencia de android.service.carrier.CarrierService#onLoadConfig()
para obtener más detalles.
Usando la configuración
Cuando se crea la configuración, los valores contenidos en ella se utilizan para establecer varios valores de configuración del sistema, incluidos:
- Configuración de telefonía del marco interno
- Valores de configuración devueltos por SDK, por ejemplo, en SmsManager
- Configuración de la aplicación como valores de conexión VVM en el Marcador
Claves de configuración
La lista de claves se define como parte del SDK público en android.telephony.CarrierConfigManager
y no puede cambiar dentro del mismo nivel de API. Consulte la siguiente tabla para obtener un resumen de las claves.
Construyendo la aplicación
Crear la aplicación
Su aplicación debe apuntar al nivel de API de Android 6.0 (23).
Declarar una clase que anula android.service.carrier.CarrierService
-
onLoadConfig
para devolver los valores que desea proporcionar en función del objetoservice.carrier.CarrierIdentifier
pasado. - Agregue lógica para llamar a
notifyConfigChangedForSubId
en escenarios donde la configuración del operador puede cambiar con el tiempo (por ejemplo, cuando el usuario agrega servicios adicionales a su cuenta).
A continuación se muestra un ejemplo:
public class SampleCarrierConfigService extends CarrierService { private static final String TAG = "SampleCarrierConfigService"; public SampleCarrierConfigService() { Log.d(TAG, "Service created"); } @Override public PersistableBundle onLoadConfig(CarrierIdentifier id) { Log.d(TAG, "Config being fetched"); PersistableBundle config = new PersistableBundle(); config.putBoolean( CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL, true); config.putBoolean( CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, false); config.putInt(CarrierConfigManager.KEY_VOLTE_REPLACEMENT_RAT_INT, 6); // Check CarrierIdentifier and add more config if needed… return config; } }
Para obtener más detalles, consulte la referencia de android.service.carrier.CarrierService
.
Nombrar la clase en el manifiesto
A continuación se muestra un ejemplo:
<service android:name=".SampleCarrierConfigService" android:label="@string/service_name" android:permission="android.permission.BIND_CARRIER_SERVICES"> <intent-filter> <action android:name="android.service.carrier.CarrierService"/></intent-filter> </service>
Firmar la aplicación con el mismo certificado en SIM
Consulte Privilegios de transportistas de la UICC para conocer los requisitos.
Agregar APN con una aplicación de operador
Para agregar APN mediante programación desde una aplicación de operador (por ejemplo, durante la activación de SIM), use las API de ContentResolver
para agregar elementos de APN a un proveedor de contenido identificado por el URI android.provider.Telephony.Carriers.CONTENT_URI
. Para obtener más información sobre la estructura de la tabla para el URI de contenido, consulte Telephony.Carriers
.
Para obtener más información, consulte APN y CarrierConfig .
Probando la aplicación
Cuando haya creado su aplicación de configuración, puede probar su código con:
- Una tarjeta SIM que contiene una firma de certificado válida
- Un dispositivo con Android 6.0 y versiones posteriores, por ejemplo, un dispositivo Android