通过实施SensorEventListener类中的监听器和重写两种方法onSensorChanged和onAccuracyChanged你就可以开始跟踪的步骤。
public class StepActivity extends Activity implements SensorEventListener{
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sSensor= sensorManager .getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
...
}
现在我们已经初始化了的SensorManager和传感器,并传感器注册为活动中的听众,我们现在需要实现onSensorChanged功能将由SensorEvent被触发每当有更改为我们注册的传感器,在我们的案例中为TYPE_STEP_DETECTOR。
private long steps = 0;
@Override
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
float[] values = event.values;
int value = -1;
if (values.length > 0) {
value = (int) values[0];
}
if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
steps++;
}
}
是的,有一些设备没有传感器。例如,三星J5。我测试了其中一个计步器(在Google上搜索,我认为在Play商店中没有)。当我安装该应用程序时,我收到一条消息,表示它没有传感器,所以应用程序无法运行。另外,我在我的问题中提到的教程的作者在他的文章的最后发表了评论:“大多数Android设备没有内置的步进计数器传感器。”所以这是有道理的。 –
在这种情况下,解决方案是让信号处理更加智能化,即在教程中挖掘解决方案并应用不同的算法。即使如此,如果运动中的尖峰看起来像台阶,那么该算法会将其标记为一个步骤。这里是旧的SO问题可能是有用的:https://stackoverflow.com/questions/6375381/are-there-any-well-known-algorithms-to-count-steps-based-on-the-accelerometer – TukeV