本文只赘述Android计步器开发里计步的原理。

在Android4.4版本之后,新增了STEP_COUNTER和STEP_DECTECTOR

STEP_COUNTER表示自从开机以来,你走的步数累计;

STEP_DECTECTOR表示你单次有效的步数。

理解了这两个含义就很容易开发这个最原始和最简单的计步器了。

先在AndroidManifest.xml中添加权限:

这两个权限是硬件的支持。

activity_main_xml中的代码:

MainActivity中的代码:

public class MainActivity extends Activity implements SensorEventListener{

private SensorManager mSensorManager;

public float mDetector;

public float mCounter;

private static final int sensorTypeD = Sensor.TYPE_STEP_DETECTOR;

private static final int sensorTypeC = Sensor.TYPE_STEP_COUNTER;

private Sensor stepCounter;

private Sensor stepDetector;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 找到控件

tv01 = (TextView) findViewById(R.id.tv01);

tv02 = (TextView) findViewById(R.id.tv02);

//获取SensorManager

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

// 获取我们需要的传感器类型

Sensor stepCounter = mSensorManager.getDefaultSensor(sensorTypeC);

Sensor stepDetector = mSensorManager.getDefaultSensor(sensorTypeD);

// 注册监听器

mSensorManager.registerListener(this, stepCounter,SensorManager.SENSOR_DELAY_FASTEST);

mSensorManager.registerListener(this, stepDetector,SensorManager.SENSOR_DELAY_FASTEST);

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

@Override

public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() == sensorTypeC) {

mCounter = event.values[0];

tv01.setText(mCounter+ "步");

}

if (event.sensor.getType() == sensorTypeD) {

if (event.values[0] == 1.0) {

mDetector++;

tv02.setText(mDetector + "步");

}

}

}

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐