我正在使用
window.addEventListener('devicemotion', event => this.watchDeviceMotion(event))
watchDeviceMotion(event: any) {
let motionData = {
x: event.acceleration.x,
y: event.acceleration.y,
z: event.acceleration.z,
}
let rotationData = {
alpha: event.rotationRate.alpha,
beta: event.rotationRate.beta,
gamma: event.rotationRate.gamma
}
if (this.getSensorData) {
// console.log(JSON.stringify(motionData))
// console.log(JSON.stringify(rotationData))
this.userData.motionData.push(motionData)
this.userData.rotationData.push(rotationData)
}
}
使用Ionic与Angular在Android设备上访问加速度计数据。当应用程序内部时,事件的频率为60 Hz,但当应用程序切换到后台时,前5分钟频率下降约9-10 Hz,并在仍然处于后台时的某个时间点返回到60 Hz,并保持不变。
我还使用了背景插件。
this.backgroundMode.enable();
this.backgroundMode.on('activate').subscribe(() => {
this.backgroundMode.disableWebViewOptimizations();
});
我尝试在config.xml中添加相应的条件来将disableBatteryOptimizations()添加到后台插件,但仍然没有成功。
我还尝试了设备运动和陀螺仪的插件,但它们的行为相同。
我该如何防止频率变慢?有其他人遇到过这个问题吗?
android.hardware.SensorManager
有SENSOR_DELAY_NORMAL
、SENSOR_DELAY_UI
、SENSOR_DELAY_GAME
和SENSOR_DELAY_FASTEST
的值,这至少可以解释不同的采样率...请参见第676行及其后面;它建议使用部分唤醒锁定-但在不处理onPause
和onResume
时会浪费电池。 - Martin Zeitler