我正在使用
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 with 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和陀螺仪的插件,但它们的行为是一样的。
我应该如何防止频率变慢?其他人以前遇到过这个问题吗?
发布于 2020-01-09 01:04:52
目前还不清楚你使用的是哪个版本的Android,但与该系统对抗通常无济于事。我猜你可能已经用老版本测试过了,因为从Android9开始,当应用程序在后台时,采样率应该是0 0Hz。这是因为新的power management具有“应用程序备用存储桶”,其中只有“活动”的存储桶不受限制。
请参阅Android 9 behavior changes
限制对后台Android9中传感器的访问限制了后台应用程序访问用户输入和传感器数据的能力。如果您的应用程序在运行Android 9的设备上后台运行,系统会对您的应用程序应用以下限制:
诸如加速计和陀螺仪之类的events.
防止这种情况的唯一方法是手动将存储桶设置为“活动”:
adb shell am set-standby-bucket packagename active|working_set|frequent|rarehttps://stackoverflow.com/questions/59600441
复制相似问题