Dan*_* T. 6 android ionic-framework devicemotion angular ionic4
我在用
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)
}
}
Run Code Online (Sandbox Code Playgroud)
使用带有 Angular 的 Ionic 访问 Android 设备上的加速度计数据。在应用程序内部时,事件以 60 Hz 的频率运行,但当应用程序切换到后台时,频率在前 5 分钟内下降约 9-10 Hz,并且在某个时刻仍处于后台时,它会以 60 Hz 的频率返回并且无限期地保持这样。
我也在使用后台插件
this.backgroundMode.enable();
this.backgroundMode.on('activate').subscribe(() => {
this.backgroundMode.disableWebViewOptimizations();
});
Run Code Online (Sandbox Code Playgroud)
我尝试将 disableBatteryOptimizations() 添加到具有 config.xml 中相应条件的后台插件,但仍然没有运气。
我还尝试了 Device Motion 和 Gyroscope 的插件,但它们的行为相同。
我应该如何防止频率变慢?有没有其他人遇到过这个问题?
目前尚不清楚您使用的是哪个版本的 Android,但针对该系统的操作通常不会有任何结果。我猜您可能已经使用旧版本进行了测试,因为从 Android 9 开始,当应用程序处于后台时,采样率的频率应该为 0Hz。这是由于采用了“应用程序待机存储桶”的新电源管理,其中只有“活动”存储桶不受限制。
查看 Android 9行为变化:
对后台传感器的有限访问 Android 9 限制了后台应用程序访问用户输入和传感器数据的能力。如果您的应用在运行 Android 9 的设备上后台运行,系统会对您的应用应用以下限制:
- 您的应用无法访问麦克风或摄像头。
- 使用连续报告模式的传感器(
例如加速度计和陀螺仪)不会接收事件。- 使用变化或一次性报告模式的传感器不会接收事件。
防止这种情况的唯一方法是手动将存储桶设置为“活动”:
adb shell am set-standby-bucket packagename active|working_set|frequent|rare
Run Code Online (Sandbox Code Playgroud)
来源:测试与电源相关的问题,还有一个UsageStatsManager。
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |