page.title=Economia de dados metaDescription=User-enabled otimização de uso de dados. page.keywords="android N", "data usage", "metered network" page.image=images/cards/card-nyc_2x.jpg @jd:body

Neste documento

  1. Verificação de preferências da Economia de dados
    1. Solicitação de permissão para colocar na lista de permissões
  2. Monitoramento de preferências do Economia de dados
  3. Teste com comandos do Android Debug Bridge

Durante a vida útil de um smartphone, o custo do plano de dados pode facilmente exceder o custo do próprio dispositivo. No N Developer Preview, os usuários podem ativar a Economia de dados no dispositivo como um todo para usar menos dados, seja em roaming, perto do final do período de cobrança ou em pacotes de dados pré-pagos pequenos.

Quando um usuário ativa a Economia de dados em Settings e o dispositivo está em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa aos aplicativos para reduzir o uso de dados no primeiro plano sempre que possível. Os usuários podem autorizar aplicativos específicos a usar dados tarifados em segundo plano, mesmo com a Economia de dados ativada.

O N Developer Preview estende a API {@link android.net.ConnectivityManager} para oferecer aos aplicativos uma forma de recuperar as preferências do usuário para a Economia de dados e monitorar as mudanças de preferências. Como prática recomendada, os aplicativos devem verificar se o usuário ativou a Economia de dados e tentar limitar o uso de dados em primeiro e segundo plano.

Verificação de preferências da Economia de dados

No N Developer Preview, aplicativos podem usar a API {@link android.net.ConnectivityManager} para determinar quais restrições de uso de dados estão sendo aplicadas. O método {@code getRestrictBackgroundStatus()} retorna um dos seguintes valores:

{@code RESTRICT_BACKGROUND_STATUS_DISABLED}
A Economia de dados está desativada.
{@code RESTRICT_BACKGROUND_STATUS_ENABLED}
O usuário ativou a Economia de dados para este aplicativo. Os aplicativos tentarão limitar o uso de dados em primeiro plano e gerenciar as restrições ao uso de dados em segundo plano.
{@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
O usuário ativou a Economia de dados, mas o aplicativo está na lista de permissões. Os aplicativos ainda tentarão limitar o uso de dados em primeiro e segundo plano.

É prática recomendada limitar o uso de dados sempre que o dispositivo estiver conectado a uma rede tarifada, mesmo que a Economia de dados esteja desativada e o aplicativo esteja na lista de permissões. O modelo de código a seguir usa {@link android.net.ConnectivityManager#isActiveNetworkMetered ConnectivityManager.isActiveNetworkMetered()} e {@code ConnectivityManager.getRestrictBackgroundStatus()} para determinar o volume máximo de dados que o aplicativo pode usar:

ConnectivityManager connMgr = (ConnectivityManager)
        getSystemService(Context.CONNECTIVITY_SERVICE);
// Checks if the device is on a metered network
if (connMgr.isActiveNetworkMetered()) {
  // Checks user’s Data Saver settings.
  switch (connMgr.getRestrictBackgroundStatus()) {
    case RESTRICT_BACKGROUND_STATUS_ENABLED:
    // Background data usage is blocked for this app. Wherever possible,
    // the app should also use less data in the foreground.

    case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
    // The app is whitelisted. Wherever possible,
    // the app should use less data in the foreground and background.

    case RESTRICT_BACKGROUND_STATUS_DISABLED:
    // Data Saver is disabled. Since the device is connected to a
    // metered network, the app should use less data wherever possible.
  }
} else {
  // The device is not on a metered network.
  // Use data as required to perform syncs, downloads, and updates.
}

Solicitação de permissão para colocar na lista de permissões

Se o seu aplicativo precisa usar dados em segundo plano, ele pode solicitar permissão para entrar na lista de permissões enviando uma intenção Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS que contenha o URI no nome de pacote do aplicativo, por exemplo, package:MY_APP_ID.

O envio da intenção e do URI abre o aplicativo Settings e exibe as configurações de uso de dados de seu aplicativo. O usuário pode decidir então se ativará os dados em segundo plano para o aplicativo. Antes de enviar a intenção, é prática recomendada perguntar primeiro ao usuário se ele deseja iniciar o aplicativo Settings com o objetivo de ativar o uso de dados em segundo plano.

Monitoramento de alterações nas preferências da Economia de dados

Os aplicativos podem monitorar alterações nas preferências da Economia de dados criando um {@link android.content.BroadcastReceiver} para escutar {@code ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} e registrar dinamicamente o receptor em {@link android.content.Context#registerReceiver Context.registerReceiver()}. Quando recebe esta transmissão, o aplicativo deve verificar se as novas preferências da Economia de dados afetam as permissões chamando {@code ConnectivityManager.getRestrictBackgroundStatus()}.

Observação: O sistema só envia esta transmissão para aplicativos que se registram dinamicamente para recebê-la em {@link android.content.Context#registerReceiver Context.registerReceiver()}. Os aplicativos que se registrarem para receber a transmissão no manifesto não a receberão.

Teste com comandos do Android Debug Bridge

O Android Debug Bridge (ADB) oferece alguns comandos que podem ser usados para verificar e configurar permissões de rede:
$ adb shell dumpsys netpolicy
Gera um relatório que inclui a configuração de restrição atual da rede de segundo plano global , os UIDs do pacote em lista de permissões e as permissões de rede de outros pacotes conhecidos.
$ adb shell cmd netpolicy
Exibe uma lista completa de comandos do Gerenciador de políticas de rede (netpolicy).
$ adb shell cmd netpolicy set restrict-background <boolean>
Ativa ou desativa o modo da Economia de dados ao passar true ou false, respectivamente.
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
Adiciona o UID do pacote especificado à lista de permissões para permitir o uso de dados de segundo plano tarifados.
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
Adiciona o UID do pacote especificado à lista de permissões para bloquear o uso de dados de segundo plano tarifados enquanto a Economia de dados estiver ativada.