3

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

我想在屏幕上显示我用相机看的方向。为此,我有一个CameraView和一个Activity在横向模式下运行。

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

也许你可以帮助我。这是我的 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 Axis 和 Y -> Z Axis 作为 RotationMatrix。

此 Activity 的 screenOrientation 也是横向的。

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

4

1 回答 1

0

我认为这是与传感器初始化有关的问题。你可以看到我对类似问题的回答。

简而言之:

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

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

于 2011-12-06T18:34:41.113 回答