UNPKG

@osobh/reactar

Version:

AR Library for React Native and Expo

84 lines (71 loc) 2.29 kB
// src/sensors/DeviceTracking.ts import { Accelerometer, Gyroscope, DeviceMotion, Magnetometer } from 'expo-sensors'; export interface SensorData { x: number; y: number; z: number; } export class DeviceTracking { private accelerometerSubscription: any = null; private gyroscopeSubscription: any = null; private deviceMotionSubscription: any = null; private magnetometerSubscription: any = null; public accelerometerData: SensorData | null = null; public gyroscopeData: SensorData | null = null; public deviceMotionData: any = null; public magnetometerData: SensorData | null = null; startAccelerometer(interval: number = 100): void { Accelerometer.setUpdateInterval(interval); this.accelerometerSubscription = Accelerometer.addListener(data => { this.accelerometerData = data; }); } stopAccelerometer(): void { if (this.accelerometerSubscription) { this.accelerometerSubscription.remove(); this.accelerometerSubscription = null; } } startGyroscope(interval: number = 100): void { Gyroscope.setUpdateInterval(interval); this.gyroscopeSubscription = Gyroscope.addListener(data => { this.gyroscopeData = data; }); } stopGyroscope(): void { if (this.gyroscopeSubscription) { this.gyroscopeSubscription.remove(); this.gyroscopeSubscription = null; } } startDeviceMotion(interval: number = 100): void { DeviceMotion.setUpdateInterval(interval); this.deviceMotionSubscription = DeviceMotion.addListener(data => { this.deviceMotionData = data; }); } stopDeviceMotion(): void { if (this.deviceMotionSubscription) { this.deviceMotionSubscription.remove(); this.deviceMotionSubscription = null; } } startMagnetometer(interval: number = 100): void { Magnetometer.setUpdateInterval(interval); this.magnetometerSubscription = Magnetometer.addListener(data => { this.magnetometerData = data; }); } stopMagnetometer(): void { if (this.magnetometerSubscription) { this.magnetometerSubscription.remove(); this.magnetometerSubscription = null; } } stopAllSensors(): void { this.stopAccelerometer(); this.stopGyroscope(); this.stopDeviceMotion(); this.stopMagnetometer(); } }