我可以通过注册和取消注册监听器来启动和停止使用Sensor.TYPE_STEP_COUNTER
录制步骤。
但是,当应用程序被销毁时,通过SensorEvent
对象传递给我的应用程序的实际值不会重置为零。如果我关闭应用程序并重新启动它,或者即使我使用更新重新编译我的应用程序,计数器也会从中断处继续。
如果我运行其他使用计步器传感器的应用程序,他们会独立计算步数并重置计数器。
传感器是否具有应用特定的缓存?将传感器重置为零步的正确方法是什么?
答案 0 :(得分:20)
public static final int TYPE_STEP_COUNTER
此类传感器返回自上次重启后用户采取的步数。该值以float形式返回(小数部分设置为零),并且仅在系统重新启动时重置为零。
(强调我的)
正如您所看到的,当传感器被激活时,该值将继续增加而不会重置为零,直到系统重新启动。
如果您希望每次启动应用程序时从0开始计数,您可以将返回的第一个值存储为初始值,然后通过它减去后续值。
答案 1 :(得分:2)
传感器的onSensorChanged方法仅在出现实际新值时调用,不会随着重复值随机触发,因此如果您想自己计算步数,则可以。
我选择将步骤值放在SharedPreferences中,每当触发onSensorChanged方法时,我将值增加1,它是可靠的,因为sensorChanged方法不会触发重复值,这个解决方案适用于我