Android传感器开发

2013-07-02

Android 中传感器的种类

加速度,Sensor.TYPE_ACCELEROMETER

陀螺仪,Sensor.TYPE_GYROSCOPE

亮度,Sensor.TYPE_LIGHT

地磁,Sensor.TYPE_MAGNETIC_FIELD

方向,Sensor.TYPE_ORIENTATION

压力,Sensor.TYPE_PRESSURE

近程,Sensor.TYPE_PROXIMITY

温度,Sensor.TYPE_TEMPERATURE

Android 中传感器的功能

SensorManager 是所有传感器的一个综合管理类,包括了传感器的种类、采样率、精准度等。

// 得到一个SensorManager对象

SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

// 得到传感器列表

List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);

// 注册传感器

boolean result = mSensorManager.registerListener(this, sensors, SensorManager.SENSOR_DELAY_FASTEST);

// 卸载传感器

mSensorManager.unregisterListener(this);

// SensorEventListener有两个接口方法

// 在传感器值更改时调用

onSensorChanged(SensorEvent event);

// SensorEvent 对象包括一组浮点数

float x = event.values[SensorManager.DATA_X];

float y = event.values[SensorManager.DATA_Y];

float z = event.values[SensorManager.DATA_Z];

// 在传感器的精准度发生改变时调用

// 参数accuracy表示传感器新的准确值

onAccuracyChanged(Sensor sensor, int accuracy);

示例:

public class SensorActivity extends Activity implements SensorEventListener {

  private boolean mRegisteredSensor;

  private SensorManager mSensorManager;

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    mRegisteredSensor = false;

    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

  }

  protected void onResume() {

    super.onResume();

    List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);

    if(sensors.size() > 0) {

      mRegisteredSensor = mSensorManager.registerListener(this, sensors.get(0), SensorManager.SENSOR_DELAY_FASTEST);

    }

  }

  protected void onPause() {

    if(mRegisteredSensor){

      mSensorManager.unregisterListener(this);

      mRegisteredSensor = false;

    }

    super.onPause();

  }

  public void onAccuracyChanged(Sensor sensor, int accuracy) {

   

  }

  public void onSensorChanged(SensorEvent event) {

    if(event.sensor.getType() == Sensor.TYPE_ORIENTATION) {

      float x = event.values[SensorManager.DATA_X];

      float y = event.values[SensorManager.DATA_Y];

      float z = event.values[SensorManager.DATA_Z];

    }

  }

}

SensorManager 常用方法

getDefaultSensor, 得到默认的传感器对象

getInclination, 得到地磁传感器倾斜角的弧度数

getOrientation, 得到设备旋转的方向

getSensorList, 得到指定传感器的列表

原文地址:https://www.cnblogs.com/fengzhblog/p/3168678.html