Start · Sprachen · JavaScript · Referenz · Sensor.start()

Sensor.start()

Methode

Aktiviert einen Sensor, der auf <code>Sensor</code> aufbaut, zum Beispiel <code>Accelerometer</code> oder <code>Gyroscope</code>. Danach liefert er Messwerte über das <code>reading</code>-Event.

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

Signatur

Sensor.prototype.start()

Beschreibung

Die Methode start() gehört zur abstrakten Schnittstelle Sensor der Generic Sensor API. Sie schaltet einen konkreten Sensor ein. Dazu gehören Accelerometer, LinearAccelerationSensor, GravitySensor, Gyroscope, Magnetometer, AbsoluteOrientationSensor, RelativeOrientationSensor und AmbientLightSensor. Wenn Sie ein Sensor-Objekt nur erzeugen, misst es noch nichts. Messwerte kommen erst nach dem Aufruf von start().

Der Aufruf arbeitet asynchron, gibt aber kein Promise zurück. Der Sensor geht zuerst in den Zustand „activating“. Sobald er bereit ist, wird das Event activate ausgelöst und sensor.activated wird true. Danach kommt bei jedem neuen Messwert ein reading-Event. Wenn etwas schiefgeht, erhalten Sie ein error-Event mit einem SensorErrorEvent. Gründe dafür sind etwa eine verweigerte Berechtigung, fehlende Hardware oder eine Sperre durch eine Permissions Policy.

Verwenden Sie start() erst, wenn Sie die Daten wirklich brauchen, zum Beispiel beim Öffnen einer Spielansicht oder einer Kompass-Anzeige. Wenn Sie die Daten nicht mehr brauchen, beenden Sie die Messung mit Sensor.stop(). Das spart Akku und Rechenleistung. Wenn Sie start() für einen Sensor aufrufen, der schon läuft oder gerade aktiviert wird, passiert nichts.

Rückgabewert

Typ
void
Beschreibung
Gibt undefined zurück. Ob der Sensor erfolgreich gestartet wurde, erfahren Sie über die Events activate und error.

Beispiele

Beschleunigungssensor starten und Werte ausgeben

if ('Accelerometer' in window) {
  const acc = new Accelerometer({ frequency: 30 });

  acc.addEventListener('activate', () => console.log('Sensor aktiv'));
  acc.addEventListener('reading', () => {
    console.log(`x=${acc.x.toFixed(2)} y=${acc.y.toFixed(2)} z=${acc.z.toFixed(2)}`);
  });
  acc.addEventListener('error', (e) => {
    console.error(`${e.error.name}: ${e.error.message}`);
  });

  acc.start();
} else {
  console.warn('Accelerometer wird nicht unterstützt');
}
Sensor aktiv x=0.12 y=0.03 z=9.81 ...

Berechtigungen prüfen, dann Gyroskop starten

const startGyro = async () => {
  const result = await navigator.permissions.query({ name: 'gyroscope' });
  if (result.state === 'denied') {
    console.warn('Zugriff auf Gyroskop verweigert');
    return null;
  }

  try {
    const gyro = new Gyroscope({ frequency: 60 });
    gyro.onreading = () => console.log('Drehrate z:', gyro.z);
    gyro.onerror = (e) => console.error(e.error.name);
    gyro.start();
    return gyro;
  } catch (err) {
    // SecurityError (z. B. Permissions Policy) oder ReferenceError (keine Unterstützung)
    console.error('Konstruktor fehlgeschlagen:', err.name);
    return null;
  }
};

startGyro();
Drehrate z: 0.0021 ...

Sensor an die Sichtbarkeit der Seite koppeln (Akku sparen)

const sensor = new AbsoluteOrientationSensor({ frequency: 20 });
sensor.onreading = () => console.log('Quaternion:', sensor.quaternion);

const toggle = () => {
  if (document.visibilityState === 'visible') {
    sensor.start(); // bereits aktiv? -> kein Effekt
  } else {
    sensor.stop();
  }
};

document.addEventListener('visibilitychange', toggle);
toggle();
Quaternion: [0.01, 0.02, 0.70, 0.71]

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die Generic Sensor API gibt es nur in Chromium-Browsern wie Chrome, Edge und Opera, und dort vor allem auf Mobilgeräten mit passender Hardware. Firefox und Safari unterstützen sie nicht. Prüfen Sie deshalb vorher, ob die API vorhanden ist, etwa mit 'Accelerometer' in window. Als Ersatz können Sie DeviceMotionEvent oder DeviceOrientationEvent verwenden.
  • Nur in sicheren Kontexten: Die API funktioniert nur über HTTPS oder localhost. In iframes muss der Zugriff über eine Permissions Policy erlaubt sein, zum Beispiel allow="accelerometer; gyroscope". Ist das nicht der Fall, wirft der Konstruktor einen SecurityError, oder es wird ein error-Event ausgelöst.
  • Kein Promise: start() gibt kein Promise zurück, und auch ein try/catch um den Aufruf erkennt keine Laufzeitfehler. Fehler kommen ausschließlich über das error-Event, das die Typen NotAllowedError, NotReadableError oder NotSupportedError enthalten kann.
  • Datenschutz: Die Sensoren liefern gewöhnlich nur Daten, solange das Dokument sichtbar ist und den Fokus hat. Die Angabe frequency gilt nur als Wunsch; der Browser kann sie begrenzen.
  • Rufen Sie stop() auf, sobald Sie keine Daten mehr brauchen. Ein Sensor, der weiterläuft, verbraucht unnötig Akku.