Signatur
Beschreibung
Die Eigenschaft activated gehört zum Interface Sensor der Generic Sensor API. Sie wird an alle konkreten Sensoren vererbt, z. B. Accelerometer, Gyroscope, AmbientLightSensor, Magnetometer oder AbsoluteOrientationSensor. Der Wert ist true, sobald der Sensor nach dem Aufruf von start() wirklich läuft und Messwerte liefert. Sonst ist er false.
Wichtig: start() arbeitet asynchron. Direkt nach dem Aufruf ist activated meist noch false. Der Sensor muss erst Berechtigungen prüfen und die Hardware verbinden. Erst wenn das Ereignis activate ausgelöst wird, steht der Wert auf true. Nach stop() oder nach einem Fehler (Ereignis error) springt er wieder auf false.
Die Eigenschaft eignet sich gut, um den Zustand abzufragen, bevor man Messwerte wie x, y oder illuminance liest. Man kann damit auch die Oberfläche anpassen, z. B. einen Start/Stopp-Knopf, oder doppelte start()-Aufrufe vermeiden. Um auf Zustandswechsel zu reagieren, sind die Ereignisse activate und error meist besser geeignet als wiederholtes Abfragen.
Rückgabewert
true, wenn der Sensor aktiv ist und Messwerte liefert, sonst false.Beispiele
Zustand vor und nach dem Start prüfen
const acl = new Accelerometer({ frequency: 30 });
console.log('Vor start():', acl.activated);
acl.start();
console.log('Direkt nach start():', acl.activated); // noch false, da asynchron
acl.addEventListener('activate', () => {
console.log('Nach activate-Ereignis:', acl.activated);
});
acl.addEventListener('error', (event) => {
console.error(event.error.name, event.error.message);
});
Start/Stopp-Knopf für ein Gyroskop
// HTML: <button id="toggle">Start</button>
const button = document.querySelector('#toggle');
const gyro = new Gyroscope({ frequency: 60 });
const updateButton = () => {
button.textContent = gyro.activated ? 'Stopp' : 'Start';
};
gyro.addEventListener('activate', updateButton);
gyro.addEventListener('error', updateButton);
button.addEventListener('click', () => {
if (gyro.activated) {
gyro.stop();
updateButton(); // nach stop() ist activated sofort false
} else {
gyro.start();
}
});
Messwerte nur von einem aktiven Sensor lesen
const startLightSensor = async () => {
if (!('AmbientLightSensor' in window)) {
console.log('AmbientLightSensor wird nicht unterstützt');
return;
}
const { state } = await navigator.permissions.query({ name: 'ambient-light-sensor' });
if (state === 'denied') {
console.log('Zugriff verweigert');
return;
}
const sensor = new AmbientLightSensor();
sensor.start();
setInterval(() => {
if (sensor.activated && sensor.hasReading) {
console.log(`Helligkeit: ${sensor.illuminance} lx`);
} else {
console.log('Sensor noch nicht bereit');
}
}, 1000);
};
startLightSensor();
// Wichtig · Fallstricke
- Asynchroner Start: Direkt nach
start()istactivatedfast immerfalse. Verlasse dich auf das Ereignisactivatestatt auf eine sofortige Abfrage. - Aktiv heißt nicht, dass schon Messwerte da sind: Ob schon ein Messwert vorliegt, verrät
hasReading. Neue Messwerte meldet das Ereignisreading. - Schreibgeschützt: Eine Zuweisung wie
sensor.activated = truewird ohne Fehlermeldung ignoriert. Im Strict Mode löst sie einenTypeErroraus. Den Sensor steuerst du nur mitstart()undstop(). - Automatisches Deaktivieren: Der Browser kann Sensoren anhalten, etwa wenn der Tab in den Hintergrund geht, das Dokument den Fokus verliert oder eine Berechtigung entzogen wird. Dann wird
activatedwiederfalse. - Kompatibilität: Die Generic Sensor API funktioniert nur in Chromium-Browsern (Chrome, Edge, Opera) und nur in einem sicheren Kontext (HTTPS). Firefox und Safari unterstützen sie nicht. Prüfe deshalb vorher, ob die API vorhanden ist, z. B. mit
'Accelerometer' in window. In iframes muss die passende Berechtigungsrichtlinie (Permissions Policy) gesetzt sein. - Datenschutz: Bewegungs- und Lichtsensoren eignen sich zum Fingerprinting (Wiedererkennen von Geräten). Frage Sensoren deshalb nur ab, wenn es wirklich nötig ist, und beende sie mit
stop(), wenn du sie nicht mehr brauchst. Das spart außerdem Akku.