Configuração da operadora

O Android 6.0 e versões mais recentes incluem um recurso para contas para fornecer configurações específicas da operadora para a plataforma. Isso com base nos privilégios da operadora UICC introduzido no Android 5.1 (Lollipop MR1), permite que as operadoras de configuração seja removida das sobreposições estáticas de configuração e oferece e OEMs, a capacidade de fornecer dinamicamente a configuração de operadoras para plataforma por meio de uma interface definida.

Um app de operadora devidamente assinado pode ser pré-carregado na imagem do sistema, instalado de forma automática ou manual em uma app store. O app é consultado pela plataforma para definir as definições incluindo:

  • Redes de roaming/sem roaming
  • Correio de voz visual
  • Configurações de rede de SMS/MMS
  • Configurações de VoLTE/IMS
.

A determinação de quais valores retornar depende inteiramente do app da operadora e podem ser dinâmicos com base em informações detalhadas transmitidas para o aplicativo por meio do de plataforma.

Os principais benefícios dessa abordagem são:

  • Configuração dinâmica: suporte para conceitos como configuração derivada que não é da MCCMNC, por exemplo, Operadoras de rede virtual móvel (MVNOs) ou clientes optam por serviços extras.
  • Suporte para dispositivos vendidos por qualquer canal - Por exemplo, um de mercado aberto podem ser configurados automaticamente configurações personalizadas fazendo o download de um app em uma app store.
  • Segurança: o privilégio para fornecer essa configuração é dados apenas a apps assinados pela operadora.
  • API definida: anteriormente, essa configuração era armazenada principalmente em sobreposições internas de XML no framework e não em uma API. A API de configuração da operadora no Android 6.0 é pública e bem definida.

Como funciona

Carregar a configuração

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

O conjunto de valores para um dispositivo específico é determinado consultando o os seguintes componentes em ordem:

  1. O app da operadora (opcional, mas recomendado) local para configuração adicional além do que existe no Android Open projeto de origem (AOSP)
  2. O app de configuração da plataforma que acompanha a imagem do sistema
  3. Valores padrão, fixados no código no framework (equivalentes ao comportamento anterior para o Android 6.0)
.

O app de configuração da plataforma

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

A finalidade deste app é oferecer configurações por rede quando uma operadora O app não está instalado, e as operadoras/OEMs devem fazer apenas alterações mínimas nele nas próprias imagens. Em vez disso, as operadoras precisam fornecer um app separado para personalização da operadora, permitindo que atualizações sejam distribuídas por meios como que as app stores.

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

O app da operadora em questão precisa ser assinado com o mesmo certificado encontrado na o chip, conforme documentado nos Privilégios da operadora UICC.

Quais informações são transmitidas para o app da operadora

O app da operadora tem os seguintes valores, que permitem fazer uma decisão dinâmica sobre quais valores retornar:

  • MCC
  • MNC
  • SPN
  • IMSI
  • ID1
  • ID2
  • ID da operadora

Para mais informações sobre a integração de IDs de operadoras, consulte Como integrar IDs de operadoras com CarrierConfig.

Ao carregar a configuração da operadora,

A criação da lista de pares de chave-valor ocorre:

  • Quando o chip estiver carregado (inicialização ou hot swap do chip)
  • Quando o app da operadora aciona uma atualização manualmente
  • Quando o app da operadora é atualizado

Consulte a android.service.carrier.CarrierService#onLoadConfig() para mais detalhes.

Usar a configuração

Quando a configuração é criada, os valores contidos nela são usados para definir diversos valores de configuração do sistema, incluindo:

  • Configurações de telefonia do framework interno
  • Valores de configuração retornados pelo SDK, por exemplo, em SmsManager
  • Configurações do app, como valores de conexão VVM no Telefone

Chaves de configuração

A lista de chaves é definida como parte do SDK público em android.telephony.CarrierConfigManager e não podem mudar dentro do mesmo nível de API. Consulte um resumo das chaves na tabela abaixo.

Criar o app

Criar o app

Seu app precisa ser direcionado ao nível da API do Android 6.0 (23).

Declarar uma classe que substitui android.service.carrier.CarrierService

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

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

Nomear a classe no manifesto

Confira um exemplo 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.CarrierService"/></intent-filter>
</service>

Assine o app com o mesmo certificado no chip

Consulte Privilégios de operadora do UICC para e cumprimento de requisitos regulatórios.

Adicionar APNs com um app de operadora

Para adicionar APNs de maneira programática em um app de operadora (por exemplo, durante ativação), use APIs do ContentResolver para adicionar itens do APN a um provedor de conteúdo identificado pelo URI android.provider.Telephony.Carriers.CONTENT_URI. Para obter mais informações sobre a estrutura da tabela do URI de conteúdo, consulte Telephony.Carriers

Para mais informações, consulte APN e CarrierConfig.

Testar o app

Depois de criar o app de configuração, teste o código por:

  • Um chip com uma assinatura de certificado válida
  • Um dispositivo com Android 6.0 e versões mais recentes, por exemplo, um dispositivo Android

Definir recursos de serviços da operadora

No Android, as funcionalidades de serviço da operadora descrevem se serviços de voz, e serviços de dados são compatíveis com um dispositivo. As operadoras podem especificar a operadora recursos de serviço para um dispositivo por dispositivo e por assinatura Android 15 ou mais recente.

Recursos de serviço no nível do dispositivo

Os recursos de serviço no nível do dispositivo são configurados dispositivo for fabricado (não pode ser alterado após a fabricação). As operadoras podem especificar funcionalidades no nível do dispositivo por meio do seguinte recurso do sistema substituições:

Os apps podem consultar os recursos de serviço do dispositivo das seguintes maneiras: APIs:

Recursos do serviço no nível da assinatura

Para dispositivos com o Android 15 ou mais recente, as operadoras podem especificar recursos de serviço do dispositivo no nível da assinatura. Para especificar o serviço no nível de assinatura recursos, use o CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY API. Por exemplo, para especificar que uma assinatura é somente para dados, defina o valor como SubscriptionManager#SERVICE_CAPABILITY_DATA:

Apps (apps do sistema pré-carregados e apps de terceiros) podem consultar a operadora recursos disponíveis para uma assinatura específica por meio do SubscriptionInfo.getServiceCapabilities() . Isso permite que os desenvolvedores de apps personalizem a experiência do usuário em apps com base no os recursos disponíveis para a assinatura. Por exemplo, os desenvolvedores de apps podem verifique se o aplicativo discador não permite fazer chamadas se o usuário estiver em um assinatura somente de dados.

APIs de recursos de serviço descontinuadas

No Android 15 e versões mais recentes, o Android oferece configurações recursos de serviço no nível da assinatura. Devido a essa mudança, a versão atual no nível do dispositivo as APIs de recursos foram renomeadas para melhorar a legibilidade. A tabela a seguir lista as APIs descontinuadas e as renomeadas introduzidas no Android 15:

Descontinuado (Android 14 ou anterior) Equivalente (Android 15 ou mais recente)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()