为什么我需要摇动手机以获得正确的“指南针数据”?

时间:2011-11-25 13:03:53

标签: android sensor compass-geolocation direction

我对“指南针”有点问题。

我想在屏幕上显示我正在用相机查看的方向。 为此,我在横向模式下运行CameraViewActivity

现在我尝试用传感器来确定方向,但出了点问题。当我启动应用程序时,它会显示一些奇怪的数据,但在摇动手机后会显示正确的数据?!

也许你可以帮助我。这是我的onSensorChanged方法:

public void onSensorChanged(SensorEvent event) {

    int type = event.sensor.getType();
    if (type == Sensor.TYPE_ACCELEROMETER) {
        mGrav = event.values.clone();
    } else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
        mMag = event.values.clone();
    }

    if (SensorManager.getRotationMatrix(mRinn, null, mGrav, mMag)) {
        SensorManager.remapCoordinateSystem(mRinn, SensorManager.AXIS_X, SensorManager.AXIS_Z, mRout);

        SensorManager.getOrientation(mRout, mOrient);

        //Logger.d("direction?: " + Math.toDegrees(mOrient[0]));
        setOrientationText(Math.toDegrees(mOrient[0]));
    }
}

我正在获取两个传感器(磁铁和加速器)的数据,然后创建RotationMatrix(就像文档告诉我的那样)。如果它是风景我把X - > X轴和Y - > RotationMatrix的Z轴。

此活动的screenOrientation也是横向的。

但我真的不明白为什么我只是在握手后才能得到正确的数据?!

1 个答案:

答案 0 :(得分:0)

我认为这是与传感器初始化有关的问题。你可以看到我对similar question做了什么回答。

简而言之:

  

对于某些轴(两个或有时,读数)为零   只有一个)。刚刚启用传感器时会发生此问题   (registerListener())我认为它与某种类型相关   传感器初始化在加速度传感器的情况下,我有   观察到只需轻轻摇动一下设备即可启动   给出正确的传感器读数。

     

正确的解决方案是onAccuracyChanged()给出的方法   有关传感器状态的正确信息。