如何在后台服务中以非常低的采样率使用加速度计? (为了节省电池)

时间:2016-07-31 15:00:17

标签: android android-sensors

我正在开发一款应用程序,我希望能够持续监控加速计传感器数据,即使屏幕关闭,但我也希望我的电池使用时间超过5小时:/最明显的当然是将采样率设置得非常低。我尝试使用SENSOR_DELAY_NORMAL和微秒值1000000(每秒一次)注册加速度计

senSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
senAccelerometer = senSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
senSensorManager.registerListener(this, senAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);

但Android操作系统很快(在我摇晃手机几秒钟后)决定覆盖这些建议的采样率并开始以大约100 /秒的速度发送我的应用程序不间断加速计传感器事件,即使我关闭屏幕。毋庸置疑,这对电池续航时间不利。

我现在尝试的是一个黑客攻击,我想知道是否有更好的,Android方式可以做到这一点,以及2.如果我做了什么,实际上不会以我想要的方式工作。我目前的解决方案是在第一次读取后(从侦听器回调中)立即取消注册加速度计,记录取消注册的时间,然后有一个单独的计时器循环,在半秒过后重新注册加速计监听器。这个似乎可以工作,但我不知道它是否会在某些设备上引起问题,或者registerListener功能本身是否会在某些设备上耗尽电池?任何其他制造非电池耗尽的永远在线背景加速度计听众的人的建议将不胜感激。感谢。

编辑2016年9月7日: 我上面描述的黑客似乎确实有效,并且似乎确实在电池上节省了很多,只要我将采样速度降低到大约0.5或1.0秒。如果我有更多的经验,无论好坏,用这种技巧我都会让你们都知道。 (如果重要的话,我在Note 4,Android 5.1.1上进行了测试)(上面还增加了一些解释性代码)

1 个答案:

答案 0 :(得分:0)

您可能想看看它在这个项目中的处理方式:

https://github.com/alanszlosek/androidstudio-accelerometer-gps/blob/master/app/src/main/java/com/alanszlosek/whenmoving/MainService.java

似乎正在使用警报来安排日志记录。采样频率更低的情况有点不同,所以我不确定哪种方法更有效。

您是否有可能将记录器代码放在github或某处?我正在尝试为一个拨款项目进行加速度计跟踪,并且无法让服务和唤醒锁一起玩得很好。