通過實施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