Implementando planos de dados

O Android 9 permite que as operadoras forneçam diretamente detalhes oficiais do plano aos usuários no aplicativo Configurações para reduzir a confusão do usuário e fazer chamadas de suporte. Em dispositivos com Android 4.0 e superior, os usuários podem configurar manualmente os detalhes do plano de dados específico da operadora no aplicativo 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 funcionalidades aos seus aplicativos Android existentes usando as APIs SubscriptionPlan . As APIs são projetadas para oferecer suporte a uma ampla variedade de tipos de planos de dados, incluindo planos recorrentes e não recorrentes e planos que mudam ao longo do tempo.

Aqui está um exemplo de como configurar um tipo comum de plano de dados que se repete mensalmente:

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 aplicativo configure planos de dados em uma destas condições:

  • O cartão SIM definiu explicitamente um aplicativo que pode gerenciá-lo, conforme definido por SubscriptionManager.canManageSubscription() .
  • A operadora enviou o valor KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING via CarrierConfigManager para indicar qual aplicativo pode gerenciar os planos de dados da operadora.
  • O dispositivo possui um aplicativo integrado à imagem do sistema que possui a permissão MANAGE_SUBSCRIPTION_PLANS .

As duas primeiras condições permitem que o aplicativo da operadora seja instalado pelo usuário, sem exigir que ele seja pré-instalado na imagem do sistema na fábrica. O sistema operacional impõe (e o CDD exige) que todos os detalhes do plano de dados configurados sejam protegidos e disponibilizados apenas para o aplicativo da operadora que originalmente forneceu os detalhes ao sistema operacional.

Um design sugerido é que um aplicativo 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 meio de mensagens SMS internas da operadora. Os serviços de manutenção ociosa são melhor implementados com uma tarefa JobScheduler que usa setRequiresDeviceIdle() e setRequiresCharging() .

Uso por SO

O SO usa os detalhes do plano de dados fornecidos pelas APIs do SubscriptionPlan das seguintes maneiras:

  • Os detalhes do plano são exibidos por meio do aplicativo Configurações para exibir o uso de dados preciso para os usuários e fornecer links diretos diretos para o aplicativo da operadora para oportunidades de upgrade/upsell.
  • Os limites de aviso de uso de dados e notificação de limite são configurados automaticamente com base nos detalhes do plano; o aviso é definido para 90% do limite.
  • Se a operadora indicar temporariamente que a rede está "congestionada" , o SO atrasa os trabalhos do JobScheduler que podem ser deslocados no tempo, reduzindo a carga na rede da operadora.
  • Se a operadora indicar temporariamente que a rede é "ilimitada" , o SO pode relatar a conexão de celular como "ilimitada" até que a operadora elimine 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 cobrança e aloca de forma conservadora 10% de quaisquer dados excedentes para melhorar a experiência do usuário, por exemplo, permitindo que os aplicativos usem dados de vários caminhos.

Customização e validação

O aplicativo 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 de seu relacionamento com a operadora e oferecendo aos usuários um caminho para o aplicativo da operadora para atualizar seu plano. Recomenda-se que os fabricantes de dispositivos que optem por personalizar o aplicativo Configurações continuem exibindo esses detalhes.

As APIs do SubscriptionManager descritas acima são testadas pelo android.telephony.cts.SubscriptionManagerTest , que garante que os detalhes do plano de dados possam ser configurados pelos aplicativos da operadora e que as alterações sejam propagadas no sistema operacional.