Android 传感器篇:(三)位置传感器(Position sensors)
这篇文章主要介绍位置传感器相关的内容。
其中在这个系列的第一篇讲了方向传感器,所以这里就不讲这一块的内容,感兴趣的移步:
1:总述
首先先看下位置传感器都有哪些,以及返回的值和单位:
其中TYPE_ORIENTATION
已经废弃。
坐标系还是不变的如下:
2:游戏旋转矢量传感器
该传感器与旋转矢量传感器相同,唯一的区别就是它不使用地磁场。所以相对来说相对旋转更准确一些。
因此,Y 轴不指向北,而是指向其他参照坐标。该参考坐标可以漂移与陀螺仪沿 Z 轴漂移时的幅度相同数量级的幅度。
具体调用:
SensorManager sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor gameRotation=sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR);
3:地磁场旋转矢量传感器
地磁旋转矢量传感器与旋转矢量传感器类似,但它使用磁力计而不是陀螺仪。
调用:
SensorManager sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor geomagnetic=sensorManager.getDefaultSensor(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR);
4:地磁场传感器
android 平台通过两个传感器来确定设备的位置:
1:加速度计accelerometer
2: 地磁场传感器
磁场传感器(也称为磁力计)可报告沿 3 个传感器坐标轴测量的环境磁场。
单位是微特斯拉 (uT)。地磁场传感器是基于硬件的。
SensorManager sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor magnetic_field=sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
5:未校准的地磁计
与地磁场传感器类似,但是没有经过硬铁校准。
未校准磁场传感器可报告环境磁场以及硬铁校准估值。
具体可看下返回值:
单位依旧是微特斯拉 (uT)。
在概念上看,未校准的测量结果是校准测量结果和偏差估值之和:
_uncalibrated = _calibrated + _bias
6:接近传感器
接近传感器可报告从传感器到最近的可见表面的距离。
某些接近传感器返回表示“近”或“远”的二进制值。在这种情况下,传感器通常在远状态报告其最大范围值,在近状态报告较小值。
调用如下:
SensorManager sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor proximity=sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
另外可以通过sensor.getMaximumRange()方法获取传感器的最大范围。
例如:我在测试的时候,当手机表面没有物体时,value[0]返回的值就是getMaximumRange的值,当我的手放到手机上方后,返回的是最小值0.
demo截图如下:
最后附上地址: