获取传感器对象并注册传感器回调
// 获取传感器的系统服务
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// 获取具体的传感器管理器-记步步增
mStepSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
// 获取具体传感器-记步总和
mStepDetector = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
// 注册传感器的回调 - 获取传感器值
mSensorManager.registerListener(mSensorEventListener, mStepSensor,
SensorManager.SENSOR_DELAY_UI);
mSensorManager.registerListener(mSensorEventListener, mStepDetector,
SensorManager.SENSOR_DELAY_UI);
注册回调 第三个参数 见下 传感器回调频率 传感器类型见:
注册传感器回调
private SensorEventListener mSensorEventListener = new SensorEventListener() {
private int mStep;
/**
* 传感器精度的改变
* @param sensor
* @param accuracy
*/
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.i(TAG, "onAccuracyChanged : accuracy " + accuracy);
}
/**
* 传感器报告新的值
* @param event
*/
@Override
public void onSensorChanged(SensorEvent event) {
Log.i(TAG, "onSensorChanged");
if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
mStep = (int) event.values[0];
}
if (event.values[0] == 1.0f) {
mStep++;
}
mTextView.setText(Integer.toString(mStep));
}
};
传感器报告新值:包括:数据的精度、产生数据的传感器、产生数据时的时间戳、以及传感器记录的新的数据。 由于传感器过于费电推荐在界面隐藏和激活的时候进行注册和反注册
//界面注册激活
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL);
}
//界面隐藏时反注册
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
传感器回调频率
SENSOR_DELAY_GAME 20,000毫秒延迟 游戏推荐采用 SENSOR_DELAY_UI 60,000毫秒延迟 如果界面展示推介 SENSOR_DELAY_FASTEST 0毫秒延迟 太过费电了
Android3.0(API Level 11)以后,你也能够使用一个绝对值(以毫秒的形式)来指定延迟
相关链接
1、http://blog.csdn.net/aikongmeng/article/details/40457233 2、http://blog.sina.com.cn/s/blog_637607ec01015y8y.html