API Battery Status em JavaScript
A Battery Status API permite acessar informações sobre o estado da bateria de um dispositivo. Esses dados podem ser utilizados para adaptar o comportamento de uma página web de acordo com o nível de carga ou o status de carregamento da bateria. A API define o objeto BatteryManager, que fornece propriedades e eventos para monitorar o estado da bateria. Você pode obter um objeto BatteryManager chamando o método getBattery() na interface navigator:
navigator.getBattery().then((batteryManager) => console.log(batteryManager)); // BatteryManager { ... }O método navigator.getBattery() retorna uma Promise. A função passada para o método then() recebe como argumento um objeto do tipo BatteryManager.
Propriedades do BatteryManager
O objeto BatteryManager fornece as seguintes propriedades para obter informações detalhadas sobre a bateria:
charging: Um valor booleano que indica se a bateria está sendo carregada no momento.chargingTime: O tempo restante em segundos até que a bateria esteja completamente carregada. Será0se a bateria já estiver totalmente carregada eInfinityse não estiver sendo carregada.dischargingTime: O tempo restante em segundos até que a bateria esteja completamente descarregada. SeráInfinityse a bateria estiver sendo carregada.level: O nível de carga da bateria, representado como um número entre0.0e1.0.
No exemplo abaixo, utilizamos o BatteryManager para exibir informações sobre o status da bateria no console:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Status da Bateria</title>
</head>
<body>
<script>
async function displayBatteryStatus() {
const batteryManager = await navigator.getBattery();
console.log("Carregando:", batteryManager.charging);
console.log("Tempo restante para carga completa (segundos):", batteryManager.chargingTime);
console.log("Tempo restante para descarga completa (segundos):", batteryManager.dischargingTime);
console.log("Nível de carga:", batteryManager.level);
}
displayBatteryStatus();
</script>
</body>
</html>Eventos do BatteryManager
A API também fornece eventos que permitem monitorar alterações no status da bateria em tempo real. Estes são os eventos disponíveis:
chargingchange: Disparado quando o status de carregamento da bateria (propriedadecharging) muda.chargingtimechange: Disparado quando o tempo restante para a carga completa (propriedadechargingTime) muda.dischargingtimechange: Disparado quando o tempo restante para a descarga completa (propriedadedischargingTime) muda.levelchange: Disparado quando o nível de carga da bateria (propriedadelevel) muda.
O código a seguir demonstra como monitorar as mudanças no status da bateria e responder aos eventos disparados:
function displayBatteryStatus(battery) {
console.log("Carregando:", battery.charging);
console.log("Tempo restante para carga completa (segundos):", battery.chargingTime);
console.log("Tempo restante para descarga completa (segundos):", battery.dischargingTime);
console.log("Nível de carga:", battery.level);
}
navigator.getBattery().then((battery) => {
// Exibe o status inicial da bateria
displayBatteryStatus(battery);
// Adiciona ouvintes para monitorar mudanças no status
battery.addEventListener("chargingchange", () => {
console.log("Carregando:", battery.charging);
});
battery.addEventListener("chargingtimechange", () => {
console.log("Tempo restante para carga completa (segundos):", battery.chargingTime);
});
battery.addEventListener("dischargingtimechange", () => {
console.log("Tempo restante para descarga completa (segundos):", battery.dischargingTime);
});
battery.addEventListener("levelchange", () => {
console.log("Nível de carga:", battery.level);
});
});Considerações finais
O BatteryManager é uma ferramenta poderosa para criar experiências web mais conscientes do consumo de energia. Por exemplo, é possível ajustar a qualidade de vídeos ou desativar funcionalidades que consomem muitos recursos quando a bateria está baixa. Além disso, os eventos permitem que você reaja dinamicamente às mudanças no status da bateria, oferecendo uma melhor experiência para o usuário.
Documentação oficial: