我在用
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/