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 <div id="qv-wrapper"> <div id="qv"> <h2> Neste documento </h2> <ol> <li> <a href="#status">Verificação de preferências da Economia de dados</a> <ol> <li> <a href="#request-whitelist">Solicitação de permissão para colocar na lista de permissões</a> </li> </ol> </li> <li> <a href="#monitor-changes">Monitoramento de preferências do Economia de dados</a> </li> <li> <a href="#testing">Teste com comandos do Android Debug Bridge</a> </li> </ol> </div> </div> <p> 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. </p> <p> Quando um usuário ativa a Economia de dados em <strong>Settings</strong> 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. </p> <p> O N Developer Preview estende a API {@link android.net.ConnectivityManager} para oferecer aos aplicativos uma forma de <a href="#status">recuperar as preferências do usuário para a Economia de dados</a> e <a href="#monitor-changes">monitorar as mudanças de preferências</a>. 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. </p> <h2 id="status"> Verificação de preferências da Economia de dados </h2> <p> 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: </p> <dl> <dt> {@code RESTRICT_BACKGROUND_STATUS_DISABLED} </dt> <dd> A Economia de dados está desativada. </dd> <dt> {@code RESTRICT_BACKGROUND_STATUS_ENABLED} </dt> <dd> 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. </dd> <dt> {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED} </dt> <dd> 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. </dd> </dl> <p> É 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: </p> <pre> 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. } </pre> <h3 id="request-whitelist"> Solicitação de permissão para colocar na lista de permissões </h3> <p> 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 <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code> que contenha o URI no nome de pacote do aplicativo, por exemplo, <code>package:MY_APP_ID</code>. </p> <p> O envio da intenção e do URI abre o aplicativo <strong>Settings</strong> 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 <strong>Settings</strong> com o objetivo de ativar o uso de dados em segundo plano. </p> <h2 id="monitor-changes"> Monitoramento de alterações nas preferências da Economia de dados </h2> <p> 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 <a href="#status">verificar se as novas preferências da Economia de dados afetam as permissões</a> chamando {@code ConnectivityManager.getRestrictBackgroundStatus()}. </p> <p class="note"> <strong>Observação:</strong> 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. </p> <h2 id="testing"> Teste com comandos do Android Debug Bridge </h2> O <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a> oferece alguns comandos que podem ser usados para verificar e configurar permissões de rede: <dl> <dt> <code>$ adb shell dumpsys netpolicy</code> </dt> <dd> 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. </dd> <dt> <code>$ adb shell cmd netpolicy</code> </dt> <dd> Exibe uma lista completa de comandos do Gerenciador de políticas de rede (netpolicy). </dd> <dt> <code>$ adb shell cmd netpolicy set restrict-background <boolean></code> </dt> <dd> Ativa ou desativa o modo da Economia de dados ao passar <code>true</code> ou <code>false</code>, respectivamente. </dd> <dt> <code>$ adb shell cmd netpolicy add restrict-background-whitelist <UID></code> </dt> <dd> Adiciona o UID do pacote especificado à lista de permissões para permitir o uso de dados de segundo plano tarifados. </dd> <dt> <code>$ adb shell cmd netpolicy remove restrict-background-whitelist <UID></code> </dt> <dd> 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. </dd> </dl>