我需要检索手机的方向。此刻我写了这个:
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]
,即 [here][1] 所述的 zed 轴上的旋转,尽管没有旋转,但该值会增加。
有人知道会发生什么吗?
编辑
另一个奇怪的事情..
我在办公室尝试了我的应用程序,它有我之前描述的奇怪行为..我在同一个办公室(相同情况)尝试了我从市场上购买的指南针应用程序,它与我的行为相同..当我将手机向上移动,值一直在变化。我在同一个办公室(相同情况)尝试了 i-phone 指南针,它没有那种奇怪的行为!
然后当我到家时,我尝试了我的应用程序和我的安卓手机的指南针应用程序,它们都工作了!!即使我向上移动手机,价值也是稳定的......
非常感谢。
[1]: http: //developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float[] , float[])