By Gemini
if ('getBattery' in navigator) {
navigator.getBattery().then(function(battery) {
// 1. Get initial battery details
console.log("Battery Level: " + (battery.level * 100) + "%");
console.log("Is Charging? " + (battery.charging ? "Yes" : "No"));
// 2. Listen for level changes
battery.addEventListener('levelchange', function() {
console.log("Updated Level: " + (battery.level * 100) + "%");
});
// 3. Listen for charger plug/unplug
battery.addEventListener('chargingchange', function() {
console.log("Updated Charging Status: " + battery.charging);
});
}).catch(function(error) {
console.error("Battery API error:", error);
});
} else {
console.log("Battery Status API is not supported in this browser/context.");
}
Full Example
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Android Battery Status Monitor</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background-color: #f4f4f9;
color: #333;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.card {
background: #ffffff;
padding: 2rem;
border-radius: 12px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
width: 90%;
max-width: 360px;
text-align: center;
}
h2 {
margin-top: 0;
color: #1a73e8;
}
.metric {
margin: 1.5rem 0;
}
.metric-label {
font-size: 0.9rem;
color: #666;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.metric-value {
font-size: 2.5rem;
font-weight: bold;
margin-top: 0.2rem;
}
.charging-status {
font-size: 1.1rem;
font-weight: 500;
}
.unsupported {
color: #d93025;
font-weight: 500;
}
</style>
</head>
<body>
<div class="card">
<h2>Battery Monitor</h2>
<div id="app">
<div class="metric">
<div class="metric-label">Battery Level</div>
<div id="battery-level" class="metric-value">--%</div>
</div>
<div class="metric">
<div class="metric-label">Status</div>
<div id="charging-status" class="charging-status">Checking...</div>
</div>
</div>
</div>
<script>
const levelEl = document.getElementById('battery-level');
const statusEl = document.getElementById('charging-status');
if ('getBattery' in navigator) {
navigator.getBattery().then(function(battery) {
// Helper function to update all fields
function updateAllBatteryInfo() {
updateLevelInfo();
updateChargeInfo();
}
// Update charge level percentage
function updateLevelInfo() {
levelEl.textContent = Math.round(battery.level * 100) + '%';
}
// Update plugged in / unplugged state
function updateChargeInfo() {
if (battery.charging) {
statusEl.textContent = '⚡ Charging';
statusEl.style.color = '#1e8e3e';
} else {
statusEl.textContent = '🔋 On Battery';
statusEl.style.color = '#333';
}
}
// Initial setup
updateAllBatteryInfo();
// Real-time Event Listeners
battery.addEventListener('levelchange', updateLevelInfo);
battery.addEventListener('chargingchange', updateChargeInfo);
}).catch(function(error) {
statusEl.textContent = 'Unable to access battery data.';
statusEl.className = 'unsupported';
});
} else {
levelEl.textContent = 'N/A';
statusEl.textContent = 'Battery API not supported or requires HTTPS.';
statusEl.className = 'unsupported';
}
</script>
</body>
</html>