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