傳感器(十二)

      傳感器
1.SensorManager
 1.sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);數組

2.光照傳感器
 1.Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
    sensorManager.registerListener(mySensorEventListener,sensor, SensorManager.SENSOR_DELAY_NORMAL);
 2.咱們所須要的數據就是存放在 SensorEvent的 values 數組get

3.加速度傳感器
 1.Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 2.加速度傳感器輸出的信息一樣也是存放在 SensorEvent 的 values 數組中的,只不過此時的 values 數組中會有三個值, 分別表明手機在  X 軸、 Y 軸和 Z軸方向上的加速度信息。io


4.方向傳感器
 1.不推薦寫法:Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
 values[0]記錄着手機圍繞 Z軸的旋轉角度,
 values[1] 記錄着手機圍繞 X軸的旋轉角度,
 values[2] 記錄着手機圍繞 Y 軸的旋轉角度List

 1.推薦寫法:事實上,Android 獲取手機旋轉的方向和角度是經過加速度傳感器和地磁傳感器共同計算得出的,這也是 Android目前推薦使用 的方式。
 Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
 sensorManager.registerListener(listener, accelerometerSensor,SensorManager.SENSOR_DELAY_GAME);
 sensorManager.registerListener(listener, magneticSensor,SensorManager.SENSOR_DELAY_GAME);
 因爲方向傳感器的精確度要求一般都比較高, 這裏咱們把傳感器輸出信息的更新速率提升了一些,使用的是 SENSOR_DELAY_GAME。
 接下來在 onSensorChanged()方法中能夠獲取到 SensorEvent 的 values 數組,分別記錄着
 加速度傳感器和地磁傳感器輸出的值。而後將這兩個值傳入到 SensorManager 的
 getRotationMatrix()方法中就能夠獲得一個包含旋轉矩陣的 R 數組,以下所示:
 SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);
 其中第一個參數 R 是一個長度爲 9 的 float 數組,getRotationMatrix()方法計算出的旋轉
 數據就會賦值到這個數組當中。 第二個參數是一個用於將地磁向量轉換成重力座標的旋轉矩
 陣,一般指定爲 null 便可。第三和第四個參數則分別就是加速度傳感器和地磁傳感器輸出的
 values 值。
 獲得了 R數組以後,接着就能夠調用 SensorManager 的 getOrientation()方法來計算手機
 的旋轉數據了,以下所示:
 SensorManager.getOrientation(R, values);
 values 是一個長度爲 3 的 float數組, 手機在各個方向上的旋轉數據都會被存放到這個數
 組當中。其中 values[0]記錄着手機圍繞着圖 12.3中 Z軸的旋轉弧度,values[1]記錄着手機圍
 繞 X 軸的旋轉弧度,values[2]記錄着手機圍繞 Y 軸的旋轉弧度。
 注意這裏計算出的數據都是以弧度爲單位的, 所以若是你想將它們轉換成角度還須要調
 用以下方法:
 Math.toDegrees(values[0]);
 好了,基本的用法就是如此,下面咱們來實際操做一下吧。
float

相關文章
相關標籤/搜索