Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Configuración del operador

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 UICC introducidos en Android 5.1 (Lollipop MR1), permite que la configuración del operador se aleje 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 plataforma consulta la aplicación para proporcionar la configuración de ajustes que incluyen:

  • Redes de roaming / no roaming
  • Buzón de voz visual
  • Configuración de red SMS / MMS
  • Configuraciones VoLTE / IMS

La determinación de qué valores devolver depende completamente de la aplicación del operador y puede ser dinámica en función de la información detallada que se transmite 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 opción del cliente por servicios adicionales.
  • Soporte para 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 de operador proporcionada por esta función 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:

  1. La aplicación del operador (esto es opcional, pero es la ubicación recomendada para configuraciones adicionales más allá de lo que existe en el Proyecto de código abierto de Android (AOSP))
  2. La aplicación de configuración de la plataforma incluida con la imagen del sistema
  3. 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 normal 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 solo deben realizar cambios mínimos en sus propias imágenes. En su lugar, los operadores deben proporcionar la aplicación de operador separada 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 de operador en cuestión debe estar firmada con el mismo certificado que se encuentra en la tarjeta SIM, como se documenta en Privilegios de operador de UICC .

Qué información se transmite a la aplicación del operador

La aplicación del operador se suministra con los siguientes valores, lo que le permite tomar una decisión dinámica sobre qué valores devolver:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • ID de operador

Para obtener más información sobre la integración de ID de operador, consulte Integración de ID de operador con CarrierConfig .

Cuando ocurre la carga de la configuración del operador

La construcción de la lista de pares clave-valor ocurre:

  • Cuando la SIM está cargada (arranque o intercambio en caliente de SIM)
  • Cuando la aplicación del operador activa manualmente una recarga
  • Cuando se actualiza la aplicación del operador

Consulta 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 que contiene se utilizan para establecer varios valores de configuración del sistema, que incluyen:

  • Configuración de telefonía de 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 tabla siguiente para obtener un resumen de las claves.

Construyendo la aplicación

Creando 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

  1. onLoadConfig para devolver los valores que desea proporcionar en función del objeto service.carrier.CarrierIdentifier pasado.
  2. 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 operador de 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 ContentResolver 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 SIM que contiene una firma de certificado válida
  • Un dispositivo con Android 6.0 y posterior, por ejemplo, un dispositivo Android