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

时间:2013-12-19 23:14:32

标签: android accelerometer gyroscope

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

我正在制作儿童故事书应用程序,我希望用户能够围绕偏航轴倾斜设备,来回移动摇椅。它只是应用程序的一小部分,并不一定非常精确。我应该使用一个传感器吗?

5 个答案:

答案 0 :(得分:59)

用户覆盖:

大多数设备都有陀螺仪和加速度计,但几乎每个设备都有一个加速度计。特别是较旧的设备和较便宜的设备没有陀螺仪。不要忘记,因为它是一个儿童应用程序,也许父母不希望小家伙使用他们的超级700美元的平板电脑,并可能会使用更便宜的平板电脑。更便宜的设备往往没有陀螺仪。所以+1加速度计。

用户体验

加速度计测量三维坐标系中的加速度。在大多数情况下(当用户实际上没有跳跃或扔设备时),加速度的最大部分是重力。仅通过重力就可以很容易地确定倾斜和轻微的运动。另外,你有Gravity软件传感器来消除奇怪的运动,而线性加速可以消除重力。陀螺仪检测旋转。它比加速度计更灵敏,更精确,产生的事件更快,但对于这个用例来说似乎有些过分。如果你想制作3D赛车游戏或飞行模拟器这对于陀螺仪来说是一场胜利,但对于儿童应用来说,这太过分了。

电池使用

这里没有比赛。陀螺仪使用的电池数量增加了3-30倍(可能更多,取决于设备),而加速度计则对电池非常温和。此外,对于大多数用户来说,加速度计已经处于活动状态(自动旋转屏幕),因此这里没有使用传感器电池。 +1表示加速度计

<强>编程

传感器在Android应用中非常简单易行。由于陀螺仪检测到旋转速度,如果设备保持静止(并且可能在+ -0.01rad / s范围内有一点噪音),它会给出全0值,因此您只需要一个小的if块来消除非常轻微的运动(例如当陀螺仪值小于0.2rad / s时)。使用加速度计,您需要一些额外的计算来确定设备的方向,以及哪个轴实际上是需要更多关注以确定运动方向的轴。这并不难,但它确实为您的工作添加了一些额外的代码行和一些额外的调试。陀螺仪为+1。

<强>结论

对于简单的儿童应用,加速度计是最佳选择。我不会再考虑了。由于您不太关心精度,因此实际上消除了陀螺仪获得的点数。

答案 1 :(得分:3)

我认为这些传感器是值得考虑的(我在这里引用了“Reto Meier,专业Android 4应用程序开发”一书):

  • Sensor.TYPE_ACCELEROMETER - 一个三轴加速度计,以m / s2(米/秒,每秒)为单位返回沿三个轴的当前加速度。

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

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

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

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

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

答案 2 :(得分:1)

我相信大多数手机都有倾斜的能力。我有一个2岁的手机,当它是新的时是45美元,并且运行Android 2.1,它倾斜并改变视角。
我也有一台三年前的平板电脑,它太倾斜了 假设倾斜会在那里,我会说你很安全。

答案 3 :(得分:1)

几乎所有(甚至全部)手机都有加速度计。但并非所有人都有陀螺仪。有人在这里制作了一个非常详尽的带陀螺仪的电话清单:Which Android phones out there do have a gyroscope?

如果您可以设法仅使用加速度计使其工作,那么它的某些更多设备将支持您的应用,但我无法真正告诉您这种差异有多大

答案 4 :(得分:1)

随着时间的推移,“典型”Android设备中可用传感器的数量和类型发生了相当大的变化。但是,一些测量设备方向的方法是较旧的功能。似乎正确的方法是在运行时测试较新的传感器,然后再回到较旧的传感器,同时优雅地处理信息根本不可用的情况。

Sensor Overiew开发者文档有一个表格,显示Android API级别首次提供特定传感器类型的时间。但请注意,这只反映了该API级别讨论该数据类型的能力;特定设备可能仍然缺少所需的硬件。

加速度计和陀螺仪似乎是最古老的传感器之一,并且很可能出现在大多数手机中。

目前(2013年12月),developer dashboard显示访问Play商店的所有Android设备除了1.6%或更新版本(API 10或更新版本)以外。该数据仅基于2.2版或使用该商店的较新设备,早于2.2的设备仅占2013年8月登录任何Google服务器的所有设备的1%。该页面包含有关设备显示分辨率的信息,但不包含似乎涵盖了设备的其他功能。我找不到专门介绍野外传感器的仪表板。