我一直试图让我的头在Android定位传感器一段时间。 我以为我明白了 然后我意识到我没有。 现在我想(希望)我有一个更好的感觉,但我仍然不是100%。 我会试着解释一下我对它的不完整的理解,希望如果我错了或者填空,希望人们能纠正我。 我想我站在0度经度(初级经线)和0度纬度(赤道)。 这个地点实际上是在非洲海岸附近的海域,但是忍耐着我。 我把手机放在我的脸前,让手机的底部指向我的脚; 我面对北(朝格林威治),所以电话的右侧指向东非洲。 在这个方向上(参照下图),我的X轴指向东,Z轴指向南,Y轴指向天空。 现在,手机上的传感器可以让您在这种情况下确定设备的方向(而不是位置)。 这个部分一直让我感到困惑,可能是因为我想明白一件事情在我接受之前是如何运作的。 看起来,这款手机采用两种不同技术的组合来实现其定位。 在这之前,想象一下,在上述的方向上,在经度和纬度为0的那块土地上站立。 想象一下,你被蒙住眼睛,你的鞋子被固定在操场上。 如果有人把你推到后面,你会向前(向北)前进,双手伸出来打破你的摔倒。 同样,如果有人推你左肩,你会右手倒下。 你的内耳有“引力传感器” (youtube clip) ,它可以让你检测你是否前倾/后退,或左右/下降(或上升)。 因此,人类可以检测与手机相同的X轴和Z轴的alignment和旋转。 现在想象一下,现在有人在环岛上旋转你90度,这样你现在就可以面向东方了。 您正在绕Y轴旋转。 这个轴是不同的,因为我们无法在生物学上检测到它。 我们知道我们有一定的angular度,但是我们不知道与行星的磁北极有关的方向。 相反,我们需要使用外部工具…磁罗盘。 这使我们能够确定我们面对的是哪个方向。 我们的手机也是如此。 现在手机也有一个3轴加速度计。 我不知道他们是如何实际工作的,但是我想象的方式是将重力想象成恒定的,一致的“雨”从天而降,并将上图中的轴想象成能够检测stream过的雨量的pipe。 当手机直立时,所有的雨都会stream经Y'pipe。 如果手机逐渐旋转,屏幕朝向天空,stream过Y的雨量将减less到零,而通过Z的音量将稳定增加,直到最大的雨量stream过。 同样,如果我们现在将手机放在侧面,Xpipe最终会收集到最大的雨量。 因此,根据手机的方向,通过测量stream经3根pipe子的雨量,可以计算出方向。 手机还有一个电子罗盘,就像一个普通的指南针 – 它的“虚拟针”指向磁北。 Android合并来自这两个传感器的信息,以便无论何时产生SensorEvent的TYPE_ORIENTATION , values[3]数组 值[0]:方位angular – (指北针在磁北以东) 值[1]:音高,围绕x轴旋转(是电话前倾还是后退) 值[2]:滚动,围绕y轴旋转(是电话左右倾斜) 所以我认为(即我不知道)Android给出方位angular(指南针方位)而不是第三个加速度计的读数的原因是指南针方位更有用。 我不知道为什么他们不推荐使用这种types的传感器,因为现在看来您需要向types为SensorEvent的系统注册监听TYPE_MAGNETIC_FIELD 。 该事件的value[]数组需要被传递到SensorManger.getRotationMatrix(..)方法来获得旋转matrix(见下文),然后传递到SensorManager.getOrientation(..)方法。 有谁知道为什么Android团队不推荐Sensor.TYPE_ORIENTATION ? 这是一个效率的东西? 这就是类似问题的意见之一,但是您仍然需要在development / […]