何时在Android上使用加速度计或陀螺仪

35

假设大多数用户设备都有陀螺仪是否可以?换句话说,如果在我的应用程序中使用陀螺仪,会排除许多人吗?

我正在制作一个儿童故事书应用程序,希望用户能够通过偏航轴倾斜他们的设备,使摇椅前后移动。这只是应用程序的一小部分,不需要非常精确。是否应该优先考虑使用某个传感器而不是其他传感器?

5个回答

63

用户覆盖率:

大多数设备都同时具备陀螺仪和加速度计,但几乎每个设备都有一个加速度计。特别是旧设备和便宜的设备通常没有陀螺仪。不要忘记,由于这是一个儿童应用程序,也许父母不希望孩子们使用他们昂贵的700美元平板电脑,而可能会使用更便宜的设备。更便宜的设备往往没有陀螺仪。因此,在加速度计方面得分+1。

用户体验

加速度计可以在三维坐标系统中测量加速度。在大多数情况下(当用户实际上没有跳来跳去或抛出设备时),加速度的最大部分是由重力引起的。只使用重力就可以非常容易地确定倾斜和轻微移动。此外,您还可以使用重力软件传感器来消除奇怪的运动,并使用线性加速度来消除重力。陀螺仪可检测旋转。它更敏感、更精确,并且比加速度计更快地生成事件,但对于这种用例来说似乎有些过度。如果您想制作一个3D赛车游戏或飞行模拟器,那么使用陀螺仪是个好选择,但对于儿童应用程序来说就太过了。

电池使用

在这里没有可比性。陀螺仪使用的电池量是加速度计的3-30倍(甚至更多,具体取决于设备),而加速度计对电池的消耗非常小。此外,对于大多数用户而言,加速度计已经处于活动状态(以自动旋转屏幕),因此在这里没有传感器电池使用。在电池方面给加速度计加分+1。

编程

传感器在Android应用中实现很容易和直接。由于陀螺仪检测旋转速度,如果设备静止,则会给出全部0值(可能在+-0.01rad/s的范围内略有噪声),因此您只需要一个小的if块来排除非常轻微的移动(例如当陀螺仪值小于0.2 rad/s时)。对于加速度计,您需要一些额外的计算来确定设备的方向以及哪个轴实际上需要更多关注以确定运动方向。这并不难,但确实需要添加一些额外的代码行和一些额外的调试工作。对于陀螺仪赞一个。

结论

对于简单的儿童应用程序,加速度计是需要的。您不太在意精度,实际上消除了陀螺仪所获得的点数。


感谢您提供深入的答案。 - user2892857

3

我认为以下传感器值得考虑(引用自《Reto Meier,Professional Android 4 Application Development》一书):

  • Sensor.TYPE_ACCELEROMETER — 三轴加速度计,以m/s²(每秒米)返回当前沿三个轴的加速度。

  • Sensor.TYPE_GYROSCOPE— 三轴陀螺仪,以弧度/秒返回设备绕三个轴的旋转速率。您可以随时间积分旋转速率以确定设备的当前方向;然而,通常最好与其他传感器(通常是加速度计)结合使用,以提供平滑和校正的方向。

  • Sensor.TYPE_ROTATION_VECTOR— 以角度和轴的组合形式返回设备的方向。它通常用作输入到Sensor Manager的getRotationMatrixFromVector方法,以将返回的旋转向量转换为旋转矩阵。旋转向量传感器通常实现为一个虚拟传感器,可以组合和校正从多个传感器(如加速度计和陀螺仪)获得的结果,以提供更平滑的旋转矩阵。

引用结束... 您可以使用getDefaultSensor方法找到给定类型的默认传感器实现,例如:

Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

如果返回 null,则表示设备没有该传感器,因此您知道不要尝试使用它。我预计大多数设备都有这些传感器(最可能是加速度计),因为它们用于检测屏幕旋转。

1
Sensor.TYPE_ROTATION_VECTOR(非常方便)正在 Moto 360 中被淘汰。您可能希望避免使用此项功能。 - MonoThreaded

1

我相信大多数手机都有倾斜的能力。我有一部两年前以45美元购买的便宜手机,运行Android 2.1系统,它可以倾斜并改变视角。
我还有一台三年前的平板电脑,它也可以倾斜。
我认为你可以安全地假设倾斜功能将存在。


1
几乎所有(甚至全部)手机都会有加速度计。但并非所有手机都有陀螺仪。这里有人列出了一份不完整的具有陀螺仪的手机列表:哪些Android手机具有陀螺仪? 如果您能够只使用加速度计使其正常工作,则更多设备将支持您的应用程序,但我无法告诉您这种差异有多大。

1
随着时间的推移,“典型”安卓设备中可用传感器的数量和类型发生了相当大的变化。但测量设备方向的某些手段是较早的能力之一。似乎正确的方法是在运行时测试较新的传感器,回退到较旧的传感器,并优雅地处理信息不可用的情况。
开发者文档“传感器概述”列出了一个表格,显示了特定传感器类型首次由Android API级别提供的时间。但请注意,这仅反映了该API级别讨论该数据类型的能力;特定设备仍可能缺少所需的硬件。
加速度计和陀螺仪似乎是最古老的传感器之一,并且可能存在于大多数手机中。

现在(2013年12月),开发者仪表板显示访问Play商店的Android设备中,除了约1.6%之外,所有设备都是版本2.3或更高版本(API 10或更高版本)。该数据仅基于使用商店的2.2或更高版本设备,而早于2.2的设备仅占2013年8月向任何Google服务器签到的所有设备的1%左右。该页面包括有关设备显示分辨率的信息,但似乎不涵盖设备的其他功能。我找不到一个专门涵盖野外可用传感器的仪表板。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接