降低步数传感器 Android/Java 的灵敏度? TYPE_ACCELEROMETER/TYPE_STEP_DETECTOR

时间:2021-06-27 20:45:24

标签: java android

我正在构建一个基本的活动跟踪应用程序,但我一直在努力实现计步器。我对 Android 开发比较陌生,所以认为它会相当简单,但遗憾的是不是。无论如何,我找到了一个非常简单的计步器,它使用了内置的加速度计,但是众所周知,这是非常敏感的 - 即使点击我的手机也算一步。

据我了解,Android 有其他内置传感器,例如 STEP_COUNTERSTEP_DETECTOR,我尝试访问这些,但没有计算步数。最初我想实现 GoogleFit API,然而,不幸的是,对于像我这样的人来说,文档是不可能理解的,所以这必须像我的年终项目一样。

有什么办法可以降低传感器的灵敏度,使其稍微更准确一些?它不需要完美,因为它只是在用户个人资料中记录 Firebase 的步骤。

其他可选查询: 按原样使用这个简单的计步器.. 我能在某个时候将它链接到智能手表应用程序吗?只是一般的疑惑..

这是我用来测试的项目: https://github.com/google/simple-pedometer

public class SimplePedometerActivity extends Activity implements SensorEventListener, StepListener {
  private TextView textView;
  private SimpleStepDetector simpleStepDetector;
  private SensorManager sensorManager;
  private Sensor accel;
  private static final String TEXT_NUM_STEPS = "Number of Steps: ";
  private int numSteps;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    textView = new TextView(this);
    textView.setTextSize(30);
    setContentView(textView);

    // Get an instance of the SensorManager
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    simpleStepDetector = new SimpleStepDetector();
    simpleStepDetector.registerListener(this);
  }

  @Override
  public void onResume() {
    super.onResume();
    numSteps = 0;
    textView.setText(TEXT_NUM_STEPS + numSteps);
    sensorManager.registerListener(this, accel, SensorManager.SENSOR_DELAY_FASTEST);
  }

  @Override
  public void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);
  }

  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {
  }

  @Override
  public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
      simpleStepDetector.updateAccel(
          event.timestamp, event.values[0], event.values[1], event.values[2]);
    }

  }
  
  @Override
  public void step(long timeNs) {
    numSteps++;
    textView.setText(TEXT_NUM_STEPS + numSteps);
  }

}

0 个答案:

没有答案
相关问题