Android 官方参考
https://source.android.com/devices/sensors/composite_sensors.html
https://developer.android.com/guide/topics/sensors/sensors_motion.html
Developer - Location and Sensors APIs
Android Hardware Abstraction Layer - sensors.h
DEmo.zip下载
先简单实现下功能,明天在优化。
package com.example.stepdemp;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.Toast;
public class Pedometer implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mStepCount;
private Sensor mStepDetector;
private float mCount;//步行总数
private float mDetector;//步行探测器
private Context context;
private static final int sensorTypeD=Sensor.TYPE_STEP_DETECTOR;
private static final int sensorTypeC=Sensor.TYPE_STEP_COUNTER;
public Pedometer() {
}
public Pedometer(Context context) {
this.context = context;
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
mStepCount = mSensorManager.getDefaultSensor(sensorTypeC);
mStepDetector = mSensorManager.getDefaultSensor(sensorTypeD);
}
public void register(){
register(mStepCount, SensorManager.SENSOR_DELAY_FASTEST);
register(mStepDetector, SensorManager.SENSOR_DELAY_FASTEST);
}
public void unRegister(){
mSensorManager.unregisterListener(this);
}
private void register(Sensor sensor,int rateUs) {
mSensorManager.registerListener(this, sensor, rateUs);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType()==sensorTypeC) {
setStepCount(event.values[0]);
}
if (event.sensor.getType()==sensorTypeD) {
if (event.values[0]==1.0) {
mDetector++;
}
}
}
public float getStepCount() {
return mCount;
}
private void setStepCount(float count) {
this.mCount = count;
}
public float getmDetector() {
return mDetector;
}
}