传感器的框架
在package android.hardware。
执行过程
主要通过以下步骤:
1、获得传感器管理对象
2、通过传感器管理对象的getDefaultSensor()获得传感器对象
3、注册传感器对象
4、传感器事件监听
动作过程如下图:
实例一:实现加速度数据的收集显示
package com.example.gravity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;
public class MainActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;// 定义传感器管理对象
private Sensor sensor;// 定义传感器对象
private TextView tv1;
private TextView tv2;
private TextView tv3;
private float gravity[] = new float[3];
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = (TextView) findViewById(R.id.textView1);
tv2 = (TextView) findViewById(R.id.textView2);
tv3 = (TextView) findViewById(R.id.textView3);
// 1、得到sensorManager对象
/*
* 得到sensorManager传感器管理对象。getSystemService是Android很重要的一个API,它是Activity的一个方法
* ,根据传入的Name来取得对应的object,然后转换成相应的服务对象。
*/
sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);
// 2、得到sensor(此方式已经过时了,但是为了支持低版本的还是需要选择这个)
// sensor = sensorManager
// .getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);
// 将SensorManager.SENSOR_ACCELEROMETER替换为Sensor.TYPE_ACCELEROMETER,后者为新版本的
/* 通过传感器管理对象的getDefaultSensor()获得传感器对象得到sensor */
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// 3、得到感应事件监听,通过注册实现
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
/* 注销传感器对象 */
sensorManager.unregisterListener(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
/* 第一个参数为Listener实例,第二个参数为想接收的传感器,第三个参数为接收频度 */
sensorManager.registerListener(this, sensor,
SensorManager.SENSOR_DELAY_NORMAL);
}
/*
* onAccuracyChanged(Sensor sensor,int
* accuracy):传感器的精准度发生变化时调用。accuracy表示新精度值。
*/
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
/*
* * SensorEventListener 是使用传感器的核心部分.onSensorChanged(SensorEvent
* event):在传感器值更改时调用。SensorEvent对象包括传感器获得的方向、加速度等信息。如下传感器一旦发现加速度值变化,便收集数据。
*/
@Override
public void onSensorChanged(SensorEvent event) {
// 但是这里获取的加速度会受到重力的影响,使用高通滤波的方式进行过滤,下面没有使用,但是在前面那篇翻译Motion Sensor提到过
gravity[0] = event.values[0];
gravity[1] = event.values[1];
gravity[2] = event.values[2];
tv1.setText("x = " + gravity[0]);
tv2.setText("y = " + gravity[1]);
tv3.setText("z = " + gravity[2]);
}
}
======================================================================================================