Economizador de bateria de rotina

O Android 10 apresenta uma opção de programação de economia de bateria chamada com base na rotina . Esta opção permite que um aplicativo escolhido pelo OEM forneça sinais ao sistema para um agendamento mais inteligente da economia de bateria. Esta opção requer configuração e sua implementação é opcional.

Configuração do dispositivo

Especificação do provedor

Para notificar a IU de 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 seu aplicativo.

Por exemplo, se você quiser que o pacote de aplicativo com.google.android.apps.turbo controle a configuração baseada na rotina , defina este valor de configuração:

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

Agora o telefone deve mostrar a opção baseada na rotina . Para verificar, crie sua imagem, atualize-a para um telefone e navegue até Configurações > Bateria > Economia de bateria > Programação de economia de bateria . A opção baseada na rotina deve aparecer.

Limite de desativação padrão

O novo campo config_dynamicPowerSavingsDefaultDisableThreshold especifica um nível de bateria no qual o sistema desliga a economia de bateria, se ela tiver sido ativada pelo agendador de rotina baseado em . O padrão do sistema é 80%, mas você pode alterá-lo.

Configuração do aplicativo

Permissões

As APIs necessárias para o aplicativo ativar a economia de bateria do aplicativo são protegidas pela permissão android.permission.POWER_SAVER . Esta é uma permissão de assinatura/privilegiada, portanto, conceda ao aplicativo que você deseja poder acionar a economia de bateria essa permissão em seu privapp-whitelist .

Um exemplo de concessão de permissão privapp a um aplicativo:

<privapp-permissions package="com.google.android.apps.turbo">
   <permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>

Se você não conceder previamente essa permissão à versão do aplicativo na imagem do sistema, o aplicativo não poderá adquirir a permissão ou chamar as APIs corretamente. O sistema não fornece nenhum feedback além dos erros normais de permissão, portanto, verifique se você pode chamar as APIs e observar seus efeitos.

Instalação

Para que a rotina baseada funcione corretamente, você deve pré-instalar o aplicativo na imagem do sistema com a permissão necessária. Conceda a permissão POWER_SAVER a apenas um aplicativo e permita que ele controle as APIs de rotina com base . O comportamento do recurso quando mais de um aplicativo tenta usar a permissão e as APIs não é compatível e não é especificado.

Acionando economia de bateria

APIs

Supondo que a configuração tenha sido bem-sucedida até o momento, o aplicativo OEM especificado na configuração deverá ser capaz de chamar com êxito o método associado no PowerManager para acionar a economia de bateria:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

Se a opção de programação de economia de bateria baseada na rotina estiver habilitada e o aplicativo chamar esse método com um valor true para powerSaveHint , a economia de bateria será ativada. Especifique disableThreshold para que, se o aplicativo não conseguir se comunicar com o sistema, o sistema ainda saiba em qual porcentagem de bateria é seguro desligar a economia de bateria.

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

Para verificar se as APIs foram chamadas com sucesso, consulte as configurações globais para verificar se a configuração de apoio mudou de valor de acordo com as chamadas de API .

Por exemplo, se o usuário selecionou o modo de economia de bateria de rotina e o aplicativo estiver chamando setDynamicPowerSaveHint(true, 10) , as configurações globais deverão ter 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 deverão ser:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0

Você pode verificar esses valores usando este comando adb :

adb shell settings get global <setting-name>

Verificação

Não há uma maneira automatizada de verificar esse recurso porque não há como saber qual comportamento um OEM usará para decidir quando acionar o modo de economia de bateria de rotina. Os OEMs são, portanto, responsáveis ​​por testar sua integração para garantir que o comportamento atenda às expectativas. Em particular, verifique se o dispositivo pode cumprir as seguintes tarefas:

  • O usuário seleciona com base na porcentagem na interface de programação de economia de bateria e seleciona 15%. A economia de bateria deve ser ativada automaticamente SOMENTE quando atingir 15% da bateria.
  • O usuário seleciona com base na rotina na UI de programação de economia de bateria. Quando o aplicativo chama a API com true , a economia de bateria é ativada. Além disso, a economia de bateria é desativada automaticamente se o dispositivo for carregado até o nível limite indicado e desconectado.
  • O usuário não seleciona nenhum na UI de programação de economia de bateria. A economia de bateria NUNCA deve ser ativada automaticamente.
  • Se o aplicativo ativar a economia de bateria e o usuário substituir manualmente a economia de bateria para desligá-la novamente (usando Configurações rápidas, Configurações etc.), ele deverá PERMANECER DESLIGADO até que o usuário o ligue novamente manualmente ou conecte o dispositivo.