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:
- O app da operadora (opcional, mas recomendado) local para configuração adicional além do que existe no Android Open projeto de origem (AOSP)
- O app de configuração da plataforma que acompanha a imagem do sistema
- 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
- Substitua
onLoadConfig
para retornar os valores que você quer fornecimento com base no objetoservice.carrier.CarrierIdentifier
passou. - 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() |