@osobh/reactar
Version:
AR Library for React Native and Expo
84 lines (71 loc) • 2.29 kB
text/typescript
// 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();
}
}