我在用

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()添加到后台插件,但还是没有运气。

我也尝试了Device Motion和Gyroscope的插件,但是它们的行为相同。

如何防止频率降低?
有人遇到过这个问题吗?

最佳答案

目前尚不清楚您使用的是哪个版本的Android,但在该系统上运行通常无济于事。猜猜您可能已经使用旧版本进行了测试,因为从Android 9开始,当应用程序在后台运行时,采样率的频率应为0Hz。
这是由于带有“应用程序备用存储桶”的新power management,其中仅限制了“Activity ”存储桶。

请参阅Android 9 behavior changes:



防止这种情况的唯一方法是将存储桶手动设置为“Activity ”:

adb shell am set-standby-bucket packagename active|working_set|frequent|rare

来源:Test power-related issues,还有一个UsageStatsManager

关于android - 在Android设备上使用Angular Ionic,加速度计事件频率在前5分钟内减慢了速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59600441/

10-11 22:54
查看更多