29.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<Sensor> 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] + "\t";
                }
                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)组成一个四元组。

你可能感兴趣的:(android,传感器,sensor,x-y-z,SensorEven)