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

3

我正在开发一个应用程序,我希望它能不断地监测加速度传感器数据,即使屏幕关闭,但同时我也希望我的电池寿命超过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次的速度向我的应用程序发送不间断的加速度传感器事件,即使我关闭屏幕也是如此。毫无疑问,这对电池寿命不利。
目前我尝试的方法有点取巧,我想知道1.是否有更好的、经过Android认证的方法来解决,以及2.我所做的是否实际上不能按照我希望的方式工作。我的当前解决方案是,在第一次读取后立即取消注册加速度计(在侦听器回调内),记录取消注册的时间,然后设置一个单独的定时器循环,在半秒钟后重新注册加速度计侦听器。这种方法似乎可以工作,但我不知道它是否会在某些设备上出现问题,或者registerListener函数本身是否会在某些设备上耗费电池?如果有其他进行非耗电常开后台加速度计监听器的人能提供任何建议,将不胜感激。谢谢。
编辑9/7/2016: 以上描述的技巧似乎确实可行,并且可以显著节省电池电量,只要将采样速度减慢到约0.5或1.0秒。如果我有任何更多的经验,无论好坏,我都会通知大家。(如果有影响的话,我在Note 4上测试了这个技巧,Android 5.1.1)(还增加了一些解释性的代码以上)。
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接