Android 平台提供以下两种传感器,以帮助您确定设备的位置:地磁场传感器和加速度计。Android 平台还提供一种传感器,可帮助您确定设备表面与物体的邻近程度(名为近程传感器)。地磁场传感器和近程传感器均基于硬件。大部分手机和平板电脑制造商都在其设备中内置地磁场传感器。同样,手机制造商通常还会在其设备中内置近程传感器,以确定手机与用户脸部的靠近程度(例如,在手机通话期间)。您可以使用设备加速度计和地磁场传感器的读数,确定设备的屏幕方向。
注意:Android 2.2(API 级别 8)已弃用方向传感器,Android 4.4W(API 级别 20)已弃用方向传感器类型。
位置传感器对于确定设备在世界参照系中的物理位置很有用。例如,您可以结合使用地磁场传感器和加速度计来确定设备相对于磁北极点的位置。您还可以使用这两种传感器,在应用的参照系中确定设备的屏幕方向。位置传感器通常不会用于监测设备的移动或运动情况,例如晃动、倾斜,或冲击(详情请参阅运动传感器)。
地磁场传感器和加速度计会为每个 SensorEvent 返回传感器值的多维数组。例如,地磁场传感器提供单个传感器事件中所有三个坐标轴的地磁场强度值。同样,加速度计传感器测量传感器事件中施加到设备的加速度。如需了解有关传感器所用坐标系的详细信息,请参阅传感器坐标系。近程传感器会为每个传感器事件提供一个值。表 1 总结了 Android 平台支持的位置传感器。
表 1. Android 平台支持的位置传感器。
传感器 | 传感器事件数据 | 说明 | 度量单位 |
---|---|---|---|
TYPE_GAME_ROTATION_VECTOR | SensorEvent.values[0] | 沿 x 轴的旋转矢量分量 (x * sin(θ/2))。 | 无单位 |
SensorEvent.values[1] | 沿 y 轴的旋转矢量分量 (y * sin(θ/2))。 | ||
SensorEvent.values[2] | 沿 z 轴的旋转矢量分量 (z * sin(θ/2))。 | ||
TYPE_GEOMAGNETIC_ROTATION_VECTOR | SensorEvent.values[0] | 沿 x 轴的旋转矢量分量 (x * sin(θ/2))。 | 无单位 |
SensorEvent.values[1] | 沿 y 轴的旋转矢量分量 (y * sin(θ/2))。 | ||
SensorEvent.values[2] | 沿 z 轴的旋转矢量分量 (z * sin(θ/2))。 | ||
TYPE_MAGNETIC_FIELD | SensorEvent.values[0] | 沿 x 轴的地磁场强度。 | 微特斯拉 |
SensorEvent.values[1] | 沿 y 轴的地磁场强度。 | ||
SensorEvent.values[2] | 沿 z 轴的地磁场强度。 | ||
TYPE_MAGNETIC_FIELD_UNCALIBRATED | SensorEvent.values[0] | 沿 x 轴的地磁场强度(无硬铁校准功能)。 | 微特斯拉 |
SensorEvent.values[1] | 沿 y 轴的地磁场强度(无硬铁校准功能)。 | ||
SensorEvent.values[2] | 沿 z 轴的地磁场强度(无硬铁校准功能)。 | ||
SensorEvent.values[3] | 沿 x 轴的铁偏差估算。 | ||
SensorEvent.values[4] | 沿 y 轴的铁偏差估算。 | ||
SensorEvent.values[5] | 沿 z 轴的铁偏差估算。 | ||
TYPE_ORIENTATION1 | SensorEvent.values[0] | 方位角(绕 z 轴的角度)。 | 度 |
SensorEvent.values[1] | 俯仰角(绕 x 轴的角度)。 | ||
SensorEvent.values[2] | 倾侧角(绕 y 轴的角度)。 | ||
TYPE_PROXIMITY | SensorEvent.values[0] | 与物体的距离。2 | 厘米 |
1Android 2.2(API 级别 8)已弃用此传感器,Android 4.4W(API 级别 20)已弃用此传感器类型。传感器框架提供用于获取设备屏幕方向的备用方法,计算设备的屏幕方向对此有所阐述。
2 某些近程传感器只提供二进制值来表示远和近。
使用游戏旋转矢量传感器
除了不使用地磁场,游戏旋转矢量传感器与旋转矢量传感器完全相同。因此,Y 轴不会指向北方,而会指向其他参照。当陀螺仪绕 Z 轴漂移时,该参照可以漂移相同的数量级。
游戏旋转矢量传感器不使用磁场,因此相对旋转更准确,且不受磁场变化的影响。如果您不在意北方在哪里,并且由于依赖磁场,正常旋转矢量不符合您的需求,则请在游戏中使用此传感器。
使用地磁旋转矢量传感器
地磁旋转矢量传感器与旋转矢量传感器类似,但前者使用磁力计而非陀螺仪。此传感器的精度比普通旋转矢量传感器低,但能耗也有所降低。如果您希望在不消耗过多电量的情况下收集后台中的某些旋转信息,则可以仅使用此传感器。与批处理结合使用时,此传感器最为有用。
计算设备的屏幕方向
通过计算设备的屏幕方向,您可以监测设备相对于地球参照系(具体为磁北极)的位置。
系统使用设备的地磁场传感器和加速度计来计算屏幕方向的角度。通过使用这两个硬件传感器,系统可提供以下三个屏幕方向角度的数据:
方位角(绕 z 轴旋转的角度)。此为设备当前指南针方向与磁北向之间的角度。如果设备的上边缘面朝磁北向,则方位角为 0 度;如果上边缘朝南,则方位角为 180 度。与之类似,如果上边缘朝东,则方位角为 90 度;如果上边缘朝西,则方位角为 270 度。
俯仰角(绕 x 轴旋转的角度)。此为平行于设备屏幕的平面与平行于地面的平面之间的角度。如果将设备与地面平行放置,且其下边缘最靠近您,同时将设备上边缘向地面倾斜,则俯仰角将变为正值。沿相反方向倾斜(将设备上边缘向远离地面的方向移动)将使俯仰角变为负值。值的范围为 -180 度到 180 度。
倾侧角(绕 y 轴旋转的角度)。此为垂直于设备屏幕的平面与垂直于地面的平面之间的角度。如果将设备与地面平行放置,且其下边缘最靠近您,同时将设备左边缘向地面倾斜,则侧倾角将变为正值。沿相反方向倾斜(将设备右边缘移向地面)将使侧倾角变为负值。值的范围为 -90 度到 90 度。
注意:传感器的侧倾角定义已更改,目的是反映地理传感器生态系统中的绝大部分实现。
请注意,这些角度使用的坐标系与航空领域所用的坐标系(针对偏航、俯仰和侧倾)不同。在航空系统中,x 轴沿飞机的长边,从机尾到机头。
屏幕方向传感器通过处理来自加速度计和地磁场传感器的原始传感器数据来获取其数据。由于涉及繁重处理,屏幕方向传感器的准确度和精度会降低。具体而言,此传感器仅在侧倾角为 0 时才可靠。因此,Android 2.2(API 级别 8)已弃用屏幕方向传感器,Android 4.4W(API 级别 20)已弃用屏幕方向传感器类型。我们建议不要使用来自屏幕方向传感器的原始数据,而是结合使用 getRotationMatrix() 方法和 getOrientation() 方法来计算屏幕方向值
使用地磁场传感器
借助地磁场传感器,您可以监测地球磁场的变化。
此传感器提供三个坐标轴中每个坐标轴的原始场强数据(以微特斯拉为单位)。通常,您无需直接使用此传感器。您可以改用旋转矢量传感器来确定原始旋转运动,或者将加速度计和地磁场传感器与 getRotationMatrix() 方法结合使用,以获得旋转矩阵和倾角矩阵。然后,您可以将这些矩阵与 getOrientation() 和 getInclination() 方法一起使用,以获取方位角和地磁倾斜度数据。
注意:在测试您的应用时,您可以通过按数字 8 的图案挥动设备来提高传感器的准确性。
使用未经校准的磁力计
未经校准的磁力计与地磁场传感器类似,不同之处在于未对磁场应用硬铁校准。出厂校准和温度补偿仍应用于磁场。未经校准的磁力计可用于处理不良的硬铁估算。通常,geomagneticsensor_event.values[0] 将接近 uncalibrated_magnetometer_event.values[0] - uncalibrated_magnetometer_event.values[3]。即,
calibrated_x ~= uncalibrated_x - bias_estimate_x
注意:未经校准的传感器可提供更多的原始结果,并且可能会包含一定偏差,但其测量值包含的从应用的校正到校准的跳跃次数更少。某些应用可能更喜欢这些未经校准的结果,因为它们更平滑、更可靠。例如,如果应用尝试进行自己的传感器融合,则引入校准实际上可能会扭曲结果。
除磁场外,未经校准的磁力计还提供每个轴上的估算硬铁偏差。
使用近程传感器
近程传感器可让您确定物体与设备的距离。
网站建设开发|APP设计开发|小程序建设开发