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, 得到指定傳感器的列表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM