Android compass的简单代码不起作用。如何修复它?

Android compass的简单代码不起作用。如何修复它?,android,geolocation,android-4.4-kitkat,compass,Android,Geolocation,Android 4.4 Kitkat,Compass,我用这个例子编写了应用程序 但它不起作用。如果我旋转手机,图像就会抖动 我使用索尼M2(安卓4.4.4) 如何写简单的指南针 你可以试试我的CompassAssistant课程。它应该完全满足您的要求: 如果你想自己尝试,我给你举个例子: 让您的活动实现SensorEventListener并添加必要的字段: public class CompassActivity extends Activity implements SensorEventListener { private

我用这个例子编写了应用程序

但它不起作用。如果我旋转手机,图像就会抖动

我使用索尼M2(安卓4.4.4)


如何写简单的指南针

你可以试试我的CompassAssistant课程。它应该完全满足您的要求:

如果你想自己尝试,我给你举个例子:

让您的活动实现SensorEventListener并添加必要的字段:

public class CompassActivity extends Activity implements SensorEventListener {

    private SensorManager sensorManager;
    private Sensor accelerometer;
    private Sensor magnetometer;
    private float[] lastAccelerometer = new float[3];
    private float[] lastMagnetometer = new float[3];
    private boolean lastAccelerometerSet = false;
    private boolean lastMagnetometerSet = false;
    private float[] rotationMatrix = new float[9];
    private float[] orientation = new float[3];
在活动的onCreate方法中,获取并启动两个传感器,即加速计和磁强计:

        // onCreate method stub ...
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_UI);
        sensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_UI);
        // more onCreate method stub ....
使用SensorEventListener的方法,您现在可以计算手机的航向,并计算当前位置与其他位置之间的方位:

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor == this.accelerometer) {
            System.arraycopy(event.values, 0, this.lastAccelerometer, 0, event.values.length);
            this.lastAccelerometerSet = true;
        } else if (event.sensor == this.magnetometer) {
            System.arraycopy(event.values, 0, this.lastMagnetometer, 0, event.values.length);
            this.lastMagnetometerSet = true;
        }

        if (this.lastAccelerometerSet && this.lastAccelerometerSet) {
            SensorManager.getRotationMatrix(this.rotationMatrix,null, this.lastAccelerometer, this.lastMagnetometer);
            SensorManager.getOrientation(this.rotationMatrix, this.orientation);


            float azimuthInRadiands = this.orientation[0];

            // this is now the heading of the phone. If you want
            // to rotate a view to north don´t forget that you have
            // to rotate by the negative value.
            float azimuthInDegrees = (float) Math.toDegrees(azimuthInRadiands);

        }
    }
但别忘了指南针背后还有很多东西。如果磁场传感器未校准,则必须向用户显示。你必须计算出磁力线和地理位置之间的差异

在我的助手看来,这一切都是可以考虑的