2

我正在从这样的重启接收步骤创建一个演示。

public class MainActivity extends AppCompatActivity implements SensorEventListener {
    private SensorManager sensorManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    }

    @Override
    protected void onResume() {
        super.onResume();
        countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);    
        sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
            Log.i("TAG","step from reboot" + String.valueOf(event.values[0]));
        }
    }
}

但是当我在我的设备(SamSung Galaxy S4)上测试时,STEP_COUNTER有时不能很好地工作:(。我通过与SHealth比较来弄清楚

经过多次测试,我发现

几乎时间,STEP_COUNTER返回步等于SHealth 有时不同。因此我认为SHealth可能会使用另一个传感器来计算步数,但我不知道是哪个传感器?我认为这不是 STEP_DETECTOR因为STEP_DETECTOR在关闭屏幕时返回的步骤很少。

有时,STEP_COUNTER停止工作,而SHealth仍然返回步骤,例如,我走了大约 100 步 => SHealth 显示 110 和演示应用显示 100,然后我继续步行大约 200 步 => SHealth 显示 305 和演示应用显示 121(似乎喜欢它停止工作)

我还收到了来自许多使用不同设备的用户的报告(评分低:(),但我只能在我的设备上复制它。

我不知道如何解决这个问题。我认为STEP_COUNTER是接收步骤的最佳传感器(与STEP_DETECTOR 相比

任何帮助或建议将不胜感激。

4

2 回答 2

3

在使用手机的默认步数传感器时,我们也遇到过这个问题。但是,我们使用的是TYPE_STEP_DETECTOR - 我们没有您遇到的问题(超过 100000 个用户),所以那里可能有问题?这个问题与您不能依赖这种机制的方式非常相似。对于我们的案例,我们在短时间内收到了很多步骤。就算你是一只老虎,你也走不了那么多步。

事情是这样的,三星操纵操作系统,有很多东西在例如 nexus 设备上运行良好,但在三星设备上却不行。在尝试修复步进传感器的行为后,我们发现我们需要三星手机的替代品,或者不支持它的手机。

仅供参考,我们遇到过一些手机(主要是摩托罗拉)在设备中没有步数传感器,因此试图找到传感器,返回 null。

  SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
  Sensor stepDetector = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
  if (stepsDetector != null) {
     //Do something
  }

您可以使用唤醒锁和加速度计来实现自己的机制(这会消耗大量电池,请注意)。

于 2017-07-11T09:26:08.237 回答
0

离开应用程序时是否取消注册传感器?根据 SDK 文档:

“如果您想长时间连续跟踪步数,请不要取消注册此传感器,这样即使 AP 处于挂起模式,它也会在后台继续计算步数,并在 AP 时报告聚合计数醒了”。

希望这会有所帮助...

于 2017-07-10T04:48:48.557 回答