sensor介紹

'''1、Android中支持的Snesor種類'''


Sensor


說明


Sensor.TYPE_ACCELEROMETER


加速度感應檢測


Sensor.TYPE_MAGNETIC_FIELD


磁場感應檢測


Sensor.TYPE_ORIENTATION


方位感應檢測


Sensor.TYPE_GYROSCOPE


迴轉儀感應檢測


Sensor.TYPE_LIGHT


亮度感應檢測


Sensor.TYPE_PRESSURE


壓力感應檢測


Sensor.TYPE_TEMPERATURE


溫度感應檢測


Sensor.TYPE_PROXIMITY


接近感應檢測


'''2、Android感應檢測管理----SensorManager'''


感應檢測功能:


1、取得SensorManager
   使用感應檢測Sensor首要先獲取感應設備的檢測信號,你可以調用Context.getSysteService(SENSER_SERVICE)
   方法來取得感應檢測的服務
2、實現取得感應檢測Sensor狀態的監聽功能
   實現以下兩個SensorEventListener方法來監聽,並取得感應檢測Sensor狀態:
   //在感應檢測到Sensor的精密度有變化時被調用到。
   public void onAccuracyChanged(Senso sensor,int accuracy);
   //在感應檢測到Sensor的值有變化時會被調用到。
   public void onSensorChanged(SensorEvent event);
3、實現取得感應檢測Sensor目標各類的值
   實現下列getSensorList()方法來取得感應檢測Sensor的值;
   List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_TEMPERATURE);
4、註冊SensorListener
   sm.regesterListener(SensorEventListener listener, Sensor sensor, int rate);  
   第一個參數:監聽Sensor事件,第二個參數是Sensor目標種類的值,第三個參數是延遲時間的精度密度。
延遲時間的精密度參數如下:
參數           延遲時間
SensorManager.SENSOR_DELAY_FASTEST  0ms


SensorManager.SENSOR_DELAY_GAME  20ms


SensorManager.SENSOR_DELAY_UI  60ms


SensorManager.SENSOR_DELAY_NORMAL  200ms


因爲感應檢測Sensor的服務是否頻繁和快慢都與電池參量的消耗有關,同時也會影響處理的效率,
所以兼顧到消耗電池和處理效率的平衡,設置感應檢測Sensor的延遲時間是一門重要的學問,
需要根據應用系統的需求來做適當的設置。


感應檢測Sensor的硬件檢測組件收不同的廠商提供。
你可以採用Sensor的getVendor(),Sensor()的getName()
和Sensor的getVeesrion()方法來取得 廠商的名稱、產品和產品版本。


5、取消註冊


sm.unregisterListener(SensorEventListener listener)  


'''距離傳感器實例可以參考:'''


'''http://10.120.10.101:9999/#/c/104708/8/packages/apps/Settings/src/com/android/settings/psensor/PSensorService.java'''


'''加速度感應檢測——Accelerometer'''


Accelerometer Sensor測量的是所有施加在設備上的力所產生的加速度的負值(包括重力加速度)。


加速度所使用的單位是m/sec^2,數值是加速度的負值。


SensorEvent.values[0]:加速度在X軸的負值


SensorEvent.values[1]:加速度在Y軸的負值


SensorEvent.values[2]:加速度在Z軸的負值


例如:


當手機Z軸朝上平放在桌面上,並且從左到右推動手機,此時X軸上的加速度是正數。


當手機Z軸朝上靜止放在桌面上,此時Z軸的加速度是+9.81m/sec^2。


當手機從空中自由落體,此時加速度是0


當手機向上以Am/sec^2的加速度向空中拋出,此時加速度是A+9.81m/sec^2


'''重力加速度感應檢測——Gravity'''


重力加速度,其單位是m/sec^2,其座標系與Accelerometer使用的一致。當手機靜止時,gravity的值和Accelerometer的值是一致的。


線性加速度感應檢測——Linear-Acceleration


Accelerometer、Gravity和Linear-Acceleration三者的關係如下公式:


accelerometer = gravity + linear-acceleration


'''地磁場感應檢測——Magnetic-field'''


地磁場的單位是micro-Tesla(uT),檢測的是X、Y、Z軸上的絕對地磁場。


'''陀螺儀感應檢測——Gyroscope'''


陀螺儀的單位是弧度/秒,測量的是物體分別圍繞X,Y,Z軸旋轉的角速度。它的座標系與加速度傳感器的座標系相同。逆時針方向旋轉的角度正的。


也就是說,如果設備逆時針旋轉,觀察者向X,Y,Z軸的正方向看去,就報告設備是正轉的。請注意,這是標準的正旋轉的數學定義。


'''光線感應檢測——Light'''


values[0]:表示環境光照的水平,單位是SI lux。


'''位置逼近感應檢測——Proximity'''


values[0]:逼近的距離,單位是釐米(cm)。有一些傳感器只能支持近和遠兩種狀態,這種情況下,傳感器必須報告它在遠狀態下的maximum_range值和在近狀態下的小值。


'''旋轉矢量感應檢測——Rotation Vector'''


旋轉向量是用來表示設備的方向,它是由角度和軸組成,就是設備圍繞x,y,z軸之一旋轉θ角度。


旋轉向量的三個要素是,這樣旋轉向量的大小等於sin(θ/2),旋轉向量的方向等於旋轉軸的方向。


values[0]: x*sin(θ/2) 
values[1]: y*sin(θ/2) 
values[2]: z*sin(θ/2) 
values[3]: cos(θ/2) (optional: only if value.length = 4)


'''方向感應檢測——Orientation'''


其單位是角度


values[0]: Azimuth(方位),地磁北方向與y軸的角度,圍繞z軸旋轉(0到359)。


0=North, 90=East, 180=South, 270=West 


values[1]: Pitch(俯仰),圍繞X軸旋轉(-180 to 180), 當Z軸向Y軸運動時是正值


values[2]: Roll(滾),圍繞Y軸旋轉(-90 to 90),當X軸向Z軸運動時是正值 


注意:這裏的定義與航空中定義的yaw、pitch和roll不同,航空中的X軸是沿着飛機的最長邊(從頭到尾)。


注意:這個傳感器類型存在遺留問題,請使用與getRotationMatrix()和remapCoordinateSystem()以及getOrientation()配合使用,來計算值代替得到的值。


重要說明:由於歷史的原因,以順時針旋轉的滾動角是正的(從數學上講,它應該是逆時針方向)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章