Google is committed to advancing racial equity for Black communities. See how.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Configuração da operadora

O Android 6.0 e superior incluem um recurso para aplicativos privilegiados para fornecer configuração específica da operadora para a plataforma. Essa funcionalidade, com base nos privilégios de operadora UICC introduzidos no Android 5.1 (Lollipop MR1), permite que a configuração da operadora seja movida para longe das sobreposições de configuração estática e dá às operadoras e OEMs a capacidade de fornecer dinamicamente configuração de operadora para a plataforma por meio de uma interface definida.

Um aplicativo de operadora devidamente assinado pode ser pré-carregado na imagem do sistema, instalado automaticamente ou manualmente por meio de uma loja de aplicativos. O aplicativo é consultado pela plataforma para fornecer configuração de configurações, incluindo:

  • Redes roaming / não roaming
  • Correio de voz visual
  • Configurações de rede SMS / MMS
  • Configurações de VoLTE / IMS

A determinação de quais valores retornar depende inteiramente do aplicativo da operadora e pode ser dinâmica com base nas informações detalhadas passadas ao aplicativo por meio da plataforma.

Os principais benefícios desta abordagem são:

  • Configuração dinâmica - Suporte para conceitos como configuração não derivada de MCCMNC, por exemplo, operadores de rede virtual móvel (MVNOs) ou opção do cliente por serviços extras.
  • Suporte para dispositivos vendidos por meio de qualquer canal - por exemplo, um telefone de mercado aberto pode ser configurado automaticamente com as configurações certas baixando um aplicativo de uma loja de aplicativos.
  • Segurança - O privilégio de fornecer esta configuração é concedido apenas a aplicativos assinados pela operadora.
  • API definida - anteriormente, essa configuração era armazenada principalmente em sobreposições XML internas na estrutura e não por meio de uma API pública. A API de configuração da operadora no Android 6.0 é pública e bem definida.

Como funciona

Carregando a configuração

A configuração da operadora fornecida por este recurso é um conjunto de pares de valores-chave que mudam vários comportamentos relacionados à telefonia na plataforma.

O conjunto de valores para um determinado dispositivo é determinado pela consulta dos seguintes componentes em ordem:

  1. O aplicativo da operadora (opcional, mas é o local recomendado para configuração adicional além do que existe no Android Open Source Project (AOSP))
  2. O aplicativo de configuração da plataforma empacotado com a imagem do sistema
  3. Valores padrão, codificados na estrutura (equivalente ao comportamento anterior ao Android 6.0)

O aplicativo de configuração da plataforma

Um aplicativo de configuração de plataforma genérico é fornecido com a imagem do sistema. Este aplicativo pode fornecer valores para quaisquer variáveis ​​que o aplicativo da operadora regular não fornece. O aplicativo de configuração da plataforma pode ser encontrado (no Android 6.0) em: packages/apps/CarrierConfig

O objetivo deste aplicativo é fornecer alguma configuração por rede quando um aplicativo de operadora não está instalado e as operadoras / OEMs devem fazer apenas alterações mínimas em suas próprias imagens. Em vez disso, as operadoras devem fornecer o aplicativo de operadora separado para personalização da operadora, permitindo que as atualizações sejam distribuídas por vias como lojas de aplicativos.

Como o privilégio é concedido a um aplicativo de operadora

O aplicativo da operadora em questão deve ser assinado com o mesmo certificado encontrado no cartão SIM, conforme documentado nos Privilégios da operadora UICC .

Quais informações são passadas para o aplicativo da operadora

O aplicativo da operadora é fornecido com os seguintes valores, permitindo-lhe tomar uma decisão dinâmica sobre quais valores retornar:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • ID da operadora

Para obter mais informações sobre a integração de IDs de operadora, consulte Integrando IDs de operadora com CarrierConfig .

Ao carregar a configuração da operadora ocorre

A construção da lista de pares de valores-chave ocorre:

  • Quando o SIM é carregado (inicialização ou hot swap do SIM)
  • Quando o aplicativo da operadora aciona manualmente uma recarga
  • Quando o aplicativo da operadora é atualizado

Consulte a referência android.service.carrier.CarrierService#onLoadConfig() para obter mais detalhes.

Usando a configuração

Quando a configuração é construída, os valores contidos nela são usados ​​para definir vários valores de configuração do sistema, incluindo:

  • Configurações de telefonia de estrutura interna
  • Valores de configuração retornados pelo SDK, por exemplo, em SmsManager
  • Configurações de aplicativos como valores de conexão VVM no discador

Chaves de configuração

A lista de chaves é definida como parte do SDK público em android.telephony.CarrierConfigManager e não pode ser alterada no mesmo nível de API. Consulte a tabela abaixo para obter um resumo das chaves.

Construindo o aplicativo

Criação do aplicativo

Seu aplicativo deve ser direcionado ao nível de API do Android 6.0 (23).

Declaração de uma classe que substitui android.service.carrier.CarrierService

  1. Substitua onLoadConfig para retornar os valores que você deseja fornecer com base no objeto service.carrier.CarrierIdentifier transmitido.
  2. Adicione lógica para chamar notifyConfigChangedForSubId em cenários onde a configuração da operadora pode mudar com o tempo (por exemplo, quando o usuário adiciona serviços extras à sua conta).

Um exemplo está abaixo:

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 obter mais detalhes, consulte a referência android.service.carrier.CarrierService .

Nomeando a classe no manifesto

Um exemplo está abaixo:

<service android:name=".SampleCarrierConfigService"
android:label="@string/service_name"
android:permission="android.permission.BIND_CARRIER_SERVICES">
      <intent-filter>
      <action android:name="android.service.carrier.ConfigService"/></intent-filter>
</service>

Assinando o aplicativo com o mesmo certificado no SIM

Consulte Privilégios de operadora UICC para obter os requisitos.

Testando o aplicativo

Depois de criar seu aplicativo de configuração, você pode testar seu código com:

  • Um SIM contendo uma assinatura de certificado válido
  • Um dispositivo executando Android 6.0 e posterior, por exemplo, um dispositivo Android