SensorManager类:用于创建sensor service的实例。该类提供了很多

用于访问和枚举传感器,注册和注销传感器监听器的方法。而且还提供了

与传感器精度、扫描频率、校正有关的常量。

Sensor类:提供了一些用于获取传感器技术参数的方法。如版本、类型、

生产商等。

1. TYPE_ACCELEROMETER:加速传感器(硬件传感器)

2. TYPE_AMBIENT_TEMPERATURE:温度传感器(硬件传感器)

3. TYPE_GRAVITY:重力传感器(硬件或软件传感器)

4. TYPE_GYROSCOPE:陀螺仪传感器(硬件传感器)

5. TYPE_LIGHT:光线传感器(硬件传感器)

6. TYPE_LINEAR_ACCELERATION:线性加速传感器(硬件或软件传感器)

7. TYPE_MAGNETIC_FIELD:磁场传感器(硬件传感器)

8. TYPE_ORIENTATION:方向传感器(软件传感器),数据来自重力和磁场传感器

9. TYPE_PRESSURE:压力传感器(硬件传感器)

10.TYPE_PROXIMITY:临近传感器(硬件传感器)

11.TYPE_RELATIVE_HUMIDITY:湿度传感器(硬件传感器)

12.TYPE_ROTATION_VECTOR:旋转向量传感器(硬件或软件传感器)

SensorEvent类:系统使用该类创建传感器事件对象。该对象可以提供与

传感器事件有关的信息。传感器事件对象包括的信息有原始的传感器回传

数据、传感器类型、数据的精度以及触发事件的时间。

SensorEventListener接口:该接口包含两个回调方法,当传感器的回传

值或精度发生变化时,系统会调用这两个回调方法。

//获取传感器列表SensorManager mSensorManager=(SensorManager) getSystemService(Context.SENSOR_SERVICE);        List
mSensors=mSensorManager.getSensorList(Sensor.TYPE_ALL); for (Sensor sensor : mSensors) { mSensorTv.append(sensor.getName()+"\n"); }

/** * @author linwb */public class MainActivity extends Activity implements SensorEventListener{    private TextView mSensorTv;    private SensorManager mSensorManager;    private float[] adjustArgs=new float[3];          @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                  mSensorTv=(TextView) findViewById(R.id.sensorTv);        mSensorManager=(SensorManager) getSystemService(Context.SENSOR_SERVICE);    }                @Override    protected void onPause() {        super.onPause();        mSensorManager.unregisterListener(this);    }          @Override    protected void onResume() {        super.onResume();        //第三个参数为刷新的频率        //SensorManager.SENSOR_DELAY_FASTEST 最快        //SensorManager.SENSOR_DELAY_GAME 游戏        //SensorManager.SENSOR_DELAY_NORMAL 普通        //SensorManager.SENSOR_DELAY_UI 用户界面        mSensorManager.registerListener(this,                mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),                SensorManager.SENSOR_DELAY_UI);        mSensorManager.registerListener(this,                mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),                SensorManager.SENSOR_DELAY_UI);    }          @Override    public void onSensorChanged(SensorEvent event) {        switch (event.sensor.getType()) {        case Sensor.TYPE_ACCELEROMETER:            //去除杂质 在此之前先保证重力传感器存在//          float x=adjustArgs[0] * 0.9f + event.values[0] *( 1 - 0.9f);//          float y=adjustArgs[1] * 0.9f + event.values[1] *( 1 - 0.9f);//          float z=adjustArgs[2] * 0.9f + event.values[2] *( 1 - 0.9f);                          String reslut=(event.values[0])+"  "+(event.values[1])                    +"  "+(event.values[2]-9.81f);            mSensorTv.setText(reslut);            break;        case Sensor.TYPE_GRAVITY:            adjustArgs[0]=event.values[0];            adjustArgs[1]=event.values[1];            adjustArgs[2]=event.values[2];            break;        default:            break;        }    }          @Override    public void onAccuracyChanged(Sensor sensor, int accuracy) {              }}