如何在电话间隙中获得准确的方向



我使用phonegap开发了一个混合应用程序。

在 phonegap api 和本机代码中使用指南针函数。

有一个问题。

我的測試設備(Galaxy Note 1,GalaxyS3等)沒有指示相同的方向。

我的电话差距来源是...

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
        startWatch();
    }
function startWatch() {
        // Update compass every 3 seconds
        var options = { frequency: 1000 };
        watchID = navigator.compass.watchHeading(onSuccess, onError, options);
    }
function onSuccess(heading) {
        var element = document.getElementById('heading');
        var deg = heading.magneticHeading;
        element.innerHTML = 'Heading: ' + deg + '<br>';        
    }

参考电话间隙 API。

我的母语来源是...

float[] mGravity;
float[] mGeomagnetic;
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
        mGravity = event.values.clone();
    if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
        mGeomagnetic = event.values.clone();
    if (mGravity != null && mGeomagnetic != null) {
        float R[] = new float[9];
        float I[] = new float[9];
        boolean success = SensorManager.getRotationMatrix(R, I, mGravity,     mGeomagnetic);
        if (success) {
        float orientation[] = new float[3];
            SensorManager.getOrientation(R, orientation);
            azimut = (float)Math.toDegrees(orientation[0]);
            //for (-180 to 180), (-10 to 350) 
            if(azimut<0)
                azimut = azimut+360;                            Log.d("azimut",""+azimut);
            // orientation contains: azimut, pitch and roll
            Matrix matrix=new Matrix();
            imgView.setScaleType(ScaleType.MATRIX);   //required
            matrix.postRotate(360-azimut+angle, imgView.getWidth()/2,     imgView.getHeight()/2);
            imgView.setImageMatrix(matrix);
        }
    }
}

参考谷歌开发者。

为什么我的设备无法指示相同的方向?

考虑到您在评论中声明这是您的指南针而不是您的代码,答案是重新校准您的指南针。 请参阅链接说明:http://forum.xda-developers.com/showthread.php?t=1778131

最新更新