Start · Sprachen · JavaScript · Referenz · Sensor.activated

Sensor.activated

Eigenschaft

Schreibgeschützte Eigenschaft, die mit einem booleschen Wert angibt, ob ein Sensor aktiv ist und Messwerte liefert.

seit JavaScript Generic Sensor API – Chromium-Browser (Chrome/Edge Kategorie: webapi

Signatur

get Sensor.prototype.activated

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

Typ
boolean
Beschreibung
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);
});
Vor start(): false Direkt nach start(): false Nach activate-Ereignis: true

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();
Sensor noch nicht bereit Helligkeit: 312 lx

// Wichtig · Fallstricke

  • Asynchroner Start: Direkt nach start() ist activated fast immer false. Verlasse dich auf das Ereignis activate statt 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 Ereignis reading.
  • Schreibgeschützt: Eine Zuweisung wie sensor.activated = true wird ohne Fehlermeldung ignoriert. Im Strict Mode löst sie einen TypeError aus. Den Sensor steuerst du nur mit start() und stop().
  • 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 activated wieder false.
  • 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.