我需要检索手机的方向。目前我写了这个:
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()){
case Sensor.TYPE_MAGNETIC_FIELD:
this.mag_vals = event.values.clone();
this.sensorReady = true;
break;
case Sensor.TYPE_ACCELEROMETER:
this.acc_vals = event.values.clone();
break;
}
if (this.mag_vals != null && this.acc_vals != null && this.sensorReady) {
this.sensorReady = false;
float[] R = new float[ProjectConstants.SIZE_MATRIX];
float[] I = new float[ProjectConstants.SIZE_MATRIX];
SensorManager.getRotationMatrix(R, I, this.acc_vals, this.mag_vals);
SensorManager.getOrientation(R, this.actual_orientation);
...
如果我将手机放在平面上并将其旋转到表面上,此代码可让我获取手机的方向。
我不明白为什么如果我将手机向上移动this.actual_orientation[0]
的值,即[此处] [1]所描述的zed轴上的旋转,虽然没有旋转,但值会增加
有人知道会发生什么吗?
修改
另一件奇怪的事情......
我在办公室里尝试了我的应用程序,它有我之前描述的奇怪行为.. 我在同一个办公室(相同的情况)尝试了一个指南针应用程序,我从市场上采取了它与我的相同的行为..当我向上移动手机时,价值一直变化.. 我试着在同一个办公室(同样的情况下)使用i-phone罗盘,但没有那种奇怪的行为!
然后,当我到家时,我尝试了两个,我的应用程序和我的Android手机的指南针应用程序,他们工作!!即使我向上移动电话价值稳定...
非常感谢。
[1]:http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float[],float [])
答案 0 :(得分:4)
器件获得的取向估计部分取决于局部磁场方向。在建筑物内,靠近铁结构和靠近电器的情况下,感测到的磁场可以在以英尺为单位测量的距离上显着变化。使用手持式磁力计或高斯计可以很容易地看到这种效果。
我怀疑这些扭曲是导致你的应用程序出现奇怪行为的原因。
答案 1 :(得分:1)
当你抬起它时,你会引入一个旋转角度,这会影响getOrientation中的返回值。旋转角度测量设备从正常位置的旋转量,即对于大多数正常位置意味着设备的设备,如果手机处于横向,旋转角度将为90或-90。 因此,如果你想要正确的读数,你必须在调用getOrientation之前调用remapCoordinateSystem。