O Android 9 permite que as operadoras forneçam detalhes de plano autorizados diretamente aos usuários no app Configurações para reduzir a confusão e oferecer suporte a chamadas. Em dispositivos com Android 4.0 e versões mais recentes, os usuários podem configurar manualmente os detalhes do plano de dados específico da operadora no app Configurações, por exemplo, definindo avisos e limites para gerenciar o uso de dados.
Configuração por operadora
Para configurar planos de dados, as operadoras podem adicionar funcionalidade aos apps
Android atuais usando as
APIs SubscriptionPlan
.
As APIs foram projetadas para oferecer suporte a uma ampla variedade de tipos de planos de dados, incluindo
recorrentes e não recorrentes, e planos que mudam com o tempo.
Confira um exemplo de como configurar um tipo comum de plano de dados recorrente:
SubscriptionManager sm =
context.getSystemService(SubscriptionManager.class);
sm.setSubscriptionPlans(subId, Lists.newArrayList(
SubscriptionPlan.Builder.createRecurringMonthly(
ZonedDateTime.parse("2016-12-03T10:00:00Z"))
.setTitle("G-Mobile")
.setDataLimit(4_000_000_000L,
SubscriptionPlan.LIMIT_BEHAVIOR_BILLED)
.setDataUsage(200_493_293L, dataUsageTimestamp)
.build()));
O dispositivo só permite que um app configure planos de dados em uma destas condições:
- O cartão SIM definiu explicitamente um app que pode gerenciá-lo, conforme definido por
SubscriptionManager.canManageSubscription()
. - A operadora enviou o valor
KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING
porCarrierConfigManager
para indicar qual app pode gerenciar os planos de dados da operadora. - O dispositivo tem um app integrado à imagem do sistema que tem a
permissão
MANAGE_SUBSCRIPTION_PLANS
.
As duas primeiras condições permitem que o app da operadora seja instalado pelo usuário, sem precisar ser pré-instalado na imagem do sistema na fábrica. O SO exige (e o CDD exige) que todos os detalhes do plano de dados configurados sejam protegidos e disponibilizados apenas para o app da operadora que originalmente forneceu os detalhes ao SO.
Um design sugerido é que um app de operadora use um serviço de manutenção ocioso para
atualizar os detalhes do plano de dados diariamente, mas as operadoras podem usar uma ampla
variedade de mecanismos, como receber detalhes do plano de dados por mensagens SMS internas
da operadora. Os serviços de manutenção ociosa são melhor implementados com um
job JobScheduler
que usa
setRequiresDeviceIdle()
e
setRequiresCharging()
.
Uso por SO
O SO usa os detalhes do plano de dados fornecidos pelas APIs SubscriptionPlan das seguintes maneiras:
- Os detalhes do plano são exibidos pelo app Configurações para mostrar o uso de dados exato aos usuários e fornecer links diretos para o app da operadora para oportunidades de upgrade/upsell.
- Os limites de aviso e notificação de limite de uso de dados são configurados automaticamente com base nos detalhes do plano. O aviso é definido como 90% do limite.
- Se a operadora indicar temporariamente que a rede está "congestionada", o SO atrasará tarefas do JobScheduler que podem ser alteradas, reduzindo a carga na rede da operadora.
- Se a operadora indicar temporariamente que a rede é "ilimitada", o SO poderá informar a conexão celular como "ilimitada" até que a operadora limpe a substituição ou até que o valor de tempo limite (se fornecido) seja atingido.
- Ao comparar o uso de dados atual do usuário com o limite geral de dados, o SO estima o uso normal de dados do usuário no final do ciclo de faturamento e aloca de forma conservadora 10% de qualquer dado excedente para melhorar a experiência do usuário, por exemplo, permitindo que os apps usem dados de vários caminhos.
Personalização e validação
O app Configurações do Android exibe todos os detalhes do plano de dados configurados pela operadora, garantindo que os usuários vejam o status mais preciso da relação com a operadora e oferecendo aos usuários um caminho para o app da operadora para fazer upgrade do plano. Os fabricantes de dispositivos que escolherem personalizar o app Configurações são recomendados a continuar exibindo esses detalhes.
As APIs SubscriptionManager
descritas nesta página são testadas pelo
android.telephony.cts.SubscriptionManagerTest
, que garante que os detalhes do plano de dados
possam ser configurados por apps de operadoras e que as mudanças sejam propagadas no
SO.