Economia de bateria de rotina

O Android 10 introduz uma opção de programação da Economia de bateria chamada Baseada em rotina. Essa opção permite que um app escolhido pelo OEM dê sinais ao sistema para programar uma economia de bateria mais inteligente. Essa opção requer configuração e é opcional para implementação.

Configuração do dispositivo

Nesta seção, descrevemos como configurar seu dispositivo para a opção Com base na rotina.

Especificação do provedor

Para notificar a interface Configurações de que o dispositivo está configurado corretamente, use sua sobreposição de configuração para substituir o valor config_batterySaverScheduleProvider pelo nome do pacote do app. Por exemplo, se você quiser que o pacote do app com.google.android.apps.turbo controle a configuração Com base na rotina, defina este valor de configuração:

<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>

Para verificar, crie a imagem, grave em um dispositivo e acesse Configurações

Bateria > Economia de bateria > Programação da Economia de bateria. A opção Com base na rotina aparece.

Limite padrão de desativação

O campo config_dynamicPowerSavingsDefaultDisableThreshold especifica um nível de bateria em que o sistema desativa a Economia de bateria se o programador Baseado em rotina a tiver ativado. O padrão do sistema é 80%, mas você pode mudar esse valor.

Configuração do app

Esta seção descreve como configurar seu app para usar a opção Com base na rotina.

Permissões

As APIs necessárias para que um app ative a Economia de bateria de rotina são protegidas pela permissão android.permission.POWER_SAVER. Essa é uma permissão de assinatura ou privilegiada. Isso significa que o app precisa estar em um diretório priv-app na imagem do sistema, e você precisa conceder essa permissão explicitamente.

Para apps privilegiados, conceda permissões em um arquivo XML de configuração do sistema no diretório /etc/permissions/ na mesma partição do app. Por exemplo, para conceder a permissão android.permission.POWER_SAVER a um app com o nome do pacote com.google.android.apps.turbo:

<!-- File located at /etc/permissions/privapp-permissions-DEVICE_NAME.xml -->
<permissions>
    <privapp-permissions package="com.google.android.apps.turbo">
        <permission name="android.permission.POWER_SAVER"/>
    </privapp-permissions>
</permissions>

Se você não conceder essa permissão ao app na imagem do sistema, ele não poderá adquirir a permissão nem chamar as APIs corretamente. O sistema não fornece feedback além dos erros de permissão padrão. Por isso, é fundamental verificar se o app pode chamar as APIs e observar os efeitos delas.

Instalação

Para que a opção Com base na rotina funcione corretamente, é necessário pré-instalar o app na imagem do sistema com a permissão necessária. Conceda a permissão android.permission.POWER_SAVER a apenas um app e deixe que ele controle as APIs Baseado em rotina. O comportamento do recurso não é compatível nem especificado se mais de um app tentar usar a permissão e as APIs.

Ativar a Economia de bateria de rotina

Nesta seção, descrevemos como o app pode acionar o Modo de economia de bateria com base na rotina usando as APIs fornecidas.

APIs

Se a configuração for bem-sucedida, o app do OEM especificado na configuração poderá chamar o método associado em PowerManager para ativar a Economia de bateria:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

Se a opção de programação da Economia de bateria Baseada em rotina estiver ativada e o app chamar esse método com um valor true para powerSaveHint, a Economia de bateria será ativada. Especifique disableThreshold para que, se o app não conseguir se comunicar com o sistema, ele ainda saiba a porcentagem de bateria em que é seguro desativar a Economia de bateria.

Essa API está sujeita a substituições do usuário e adiamento da Economia de bateria da mesma forma que a Economia de bateria automática baseada em porcentagem. Consulte a documentação da API para mais informações.

Para verificar se as APIs foram chamadas corretamente, consulte as configurações globais e confirme se o valor da configuração de suporte mudou de acordo com as chamadas de API. Por exemplo, se você selecionar o modo Economia de bateria Com base na rotina e o app chamar setDynamicPowerSaveHint(true, 10), as configurações globais terão estes valores:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1

Se você chamar setDynamicPowerSaveHint(false, 25), os valores serão:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0

É possível verificar esses valores usando o comando adb:

adb shell settings get global <setting-name>

Verificação

Não há uma maneira automatizada de verificar esse recurso porque o OEM determina o comportamento que aciona o modo Economia de bateria Com base na rotina. Os OEMs precisam testar a integração para verificar se o comportamento atende às expectativas. Especificamente, verifique se o dispositivo pode realizar as seguintes tarefas:

  • Com base na porcentagem:se você selecionar Com base na porcentagem na interface da Programação da Economia de bateria e escolher 15%, a Economia de bateria será ativada automaticamente apenas quando a bateria atingir 15%.
  • Baseada em rotina:se você selecionar Baseada em rotina na interface da Programação da Economia de bateria, a Economia de bateria será ativada quando o app chamar a API com true. Além disso, a Economia de bateria é desativada automaticamente se o dispositivo for carregado até o nível de limite indicado e desconectado.
  • Nenhuma:se você selecionar Nenhuma na interface Programação da Economia de bateria, a Economia de bateria nunca será ativada automaticamente.
  • Substituição manual:se o app ativar a Economia de bateria e você substituir manualmente a Economia de bateria para desativá-la (usando as Configurações rápidas, as Configurações ou outros métodos), ela vai permanecer desativada até que você a ative novamente de forma manual ou conecte o dispositivo.