Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 29.Android 傳感器

29.Android 傳感器

編輯:關於Android編程

29.Android 傳感器

Android 傳感器 Android 傳感器介紹 Android SensorManager Sensor的類型 Sensor API Sensor 監聽 SensorEvent中values的x y z含義 加速度傳感器G-sensor 磁力傳感器M-sensor 方向傳感器O-sensor 陀螺儀傳感器Gyro-sensor 光線感應傳感器 壓力傳感器 溫度傳感器 距離傳感器 重力傳感器GV-sensor 線性加速度傳感器LA-sensor 旋轉矢量傳感器RV-sensor


Android 傳感器介紹

Android的傳感器大多都跟手機的硬件有關,有些傳感器還跟手機的軟件與硬件都相關。

很多人很迷茫,什麼叫傳感器呀?其實傳感器就是一系列手機內部自帶的測量儀器。可以用來測量方向、距離、磁力、光線等等(包括你知道的和你很多不知道的)。


Android SensorManager

想要拿到手機上的傳感器管理器(SensorManager),還是需要通過Activity.getSystemService(@ServiceName @NonNull String name)

// 獲取傳感器管理器
SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
// 獲得全部的傳感器列表
List sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

Sensor的類型

這裡介紹主流的11種Sensor。

Type Name Value TYPE_ACCELEROMETER 加速度傳感器 1 TYPE_MAGNETIC_FIELD 磁力傳感器 2 TYPE_ORIENTATION 方向傳感器 3 TYPE_GYROSCOPE 陀螺儀傳感器 4 TYPE_LIGHT 光線感應傳感器 5 TYPE_PRESSURE 壓力傳感器 6 TYPE_TEMPERATURE 溫度傳感器 7 TYPE_PROXIMITY 距離傳感器 8 TYPE_GRAVITY 重力傳感器 9 TYPE_LINEAR_ACCELERATION 線性加速度傳感器 10 TYPE_ROTATION_VECTOR 旋轉矢量傳感器 11

Sensor API

最大取值范圍
Sensor.getMaximumRange()

設備名稱
Sensor.getName()

功率
Sensor.getPower()

精度
Sensor.getResolution()

傳感器類型
Sensor.getType()

設備供應商
Sensor.getVentor()

設備版本號
Sensor.getVersion()


Sensor 監聽

根據傳感器的Type獲取該Type默認配置的傳感器
SensorManager。getDefaultSensor(int type)

以監聽加速度傳感器為例,可以拿到傳感器測量的數據。

        // 獲取默認加速度傳感器
        Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        /**
         * 傳感器監聽
         * SensorEvent.values[0] = x
         * SensorEvent.values[1] = y
         * SensorEvent.values[2] = z
         */
        SensorEventListener listener = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
                String info = ;
                for (int i = 0; i < event.values.length; i++) {
                    info += event.values[ + i + ]: + event.values[i] + 	;
                }
                Log.i(SensorManagerActivity, info);
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {

            }
        };

        // 給對應傳感器添加監聽
        sensorManager.registerListener(listener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);

SensorEvent中values的x y z含義


加速度傳感器(G-sensor)

x、y、z的值分別表示在x、y、z軸上的加速度

這三個數值是都到地心引力的影響,單位是m/s^2

手機平放,x軸默認為0,y軸默認0,z軸默認9.8。

向左加速運動,x軸為正值。 向右加速運動,x軸為負值。 向上加速運動,y軸為負值。 向下加速運動,y軸為正值。

磁力傳感器(M-sensor)

x、y、z的值分別表示在x、y、z軸上的環境磁場數據

單位是微特斯拉(micro-Tesla),用uT表示

同時也能換算成高斯(Gauss),1Tesla=10000Gauss


方向傳感器(O-sensor)

x、y、z的值分別表示在x、y、z軸上的角度數據

單位是角度

x、y、z的值詳細的角度數據對應為:azimuth、pitch、roll

azimuth:方位,返回水平時磁北極和Y軸的夾角,范圍為0°~360°。
0°=北,90°=東,180°=南,270°=西。

pitch:x軸和水平面的夾角,范圍為-180°~180°。
當z軸向y軸轉動時,角度為正值。

roll:y軸和水平面的夾角,范圍為-90°~90°。
當x軸向z軸移動時,角度為正值。


陀螺儀傳感器(Gyro-sensor)

x、y、z的值分別表示在x、y、z軸上的角加速度數據

單位是radians/second

水平逆時針旋轉,z軸為正。 水平順時針旋轉,z軸為負。 水平向左旋轉,y軸為負。 水平向右旋轉,y軸為正。 水平向上旋轉,x軸為負。 水平向下旋轉,x軸為正。

光線感應傳感器

x值表示檢測到的實時光線強度, 范圍在0~未知(我的手機上最大可以到46000)

單位是lux,是照射到單位面積上的光通量。

光線感應傳感器主要用於Android系統的LCD自動亮度功能

可以根據采樣到的光強數值實時調整LCD的亮度


壓力傳感器

返回當前的壓強(目前我的手機上沒有這個傳感器 –Moto X Style)。

單位是百帕斯卡hectopascal(hPa)


溫度傳感器

返回當前的溫度。(目前我的手機上沒有這個傳感器 –Moto X Style)。


距離傳感器

x的值返回物體與手機屏幕的距離。范圍為0~100。

單位是厘米

可用於接聽電話時自動關閉LCD屏幕以節省電量

一些芯片集成了接近傳感器和光線傳感器兩者功能。


重力傳感器(GV-sensor)

z值返回重力數據

地球上,重力數值為9.8,單位是m/s^2

手機平放,顯示的數據和加速度傳感器顯示的數據一樣


線性加速度傳感器(LA-sensor)

線性加速度傳感器是加速度傳感器減去重力影響獲取的數據

單位是m/s^2

線性加速度 = 加速度 - 重力

手機平放時,重力數據又和加速數據一樣。所以此時,線性加速度的默認數據為:x=0,y=0,z=0。


旋轉矢量傳感器(RV-sensor)

這個太復雜了!建議不要去玩這個了。

旋轉矢量代表設備的方向,是一個將坐標軸和角度混合計算得到的數據。

RV-sensor輸出三個數據:

value[0] = x*sin(theta/2)
value[1] = y*sin(theta/2)
value[2] = z*sin(theta/2)

sin(theta/2)是RV的數量級。

RV的方向與軸旋轉的方向相同。

RV的三個數值,與cos(theta/2)組成一個四元組。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved