Skip to content

Most visited

Recently visited

navigation

Otimização do uso de dados de rede

Durante a vida útil de um smartphone, o custo do plano de dados pode facilmente exceder o custo do próprio dispositivo. A partir do Android 7.0 (API de nível 24), os usuários podem ativar a Economia de dados para o dispositivo como um todo para otimizar o uso de dados de seu dispositivo e usar menos dados. Esta capacidade é particularmente útil em deslocamento, perto do final do ciclo de faturamento ou para um pacote de dados pré-pago pequeno.

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 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 ConnectivityManager para determinar as restrições de uso de dados aplicadas. O método getRestrictBackgroundStatus() retorna um dos seguintes valores:

RESTRICT_BACKGROUND_STATUS_DISABLED
A Economia de dados está desativada.
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.
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. A amostra de código a seguir usa ConnectivityManager.isActiveNetworkMetered() e ConnectivityManager.getRestrictBackgroundStatus() para determinar o quanto de dados o aplicativo deve 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 um intent 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 do intent 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 o intent, recomenda-se 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

Aplicativos podem monitorar alterações às preferências de Economia de dados criando um BroadcastReceiver para escutar ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED e registrar dinamicamente o receptor em 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 ConnectivityManager.getRestrictBackgroundStatus().

Observação: O sistema só envia essa transmissão para aplicativos que se registram dinamicamente para elas com 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) fornece alguns comandos que você pode usar para testar seu aplicativo em condições de Economia de dados. Você pode verificar e configurar permissões de rede ou definir redes sem fio como tarifadas para testar seu aplicativo em redes não tarifadas.

$ 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.
$ adb shell cmd netpolicy list wifi-networks
Lista todas as redes Wi-Fi, exibindo se elas são tarifadas.
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
Define Wi-Fi com o SSID especificado como tarifada, o que permite simular uma rede tarifada em uma rede não tarifada.
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Siga o Google Developers no WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (Dec 2017 Android Platform & Tools Survey)