6

使用Location.getBearing();我似乎会随机改变轴承。

Aka,我可以慢慢转动设备,它不会注意到,它只是选择自己的随机方位。

我知道设备正在工作,因为平板电脑上的地图应用程序中的“你在这里”图标会随着我旋转设备而缓慢旋转。

是否有不同的正确方法来获得轴承?我正在使用 GPS。也许有更好的方法来确定您所面临的方向。

4

3 回答 3

3

返回 GPS 卫星为您计算的Location.getBearing()方位。它不是您设备标题的实时表示。Google Maps 应用程序使用设备内置的 G 传感器来获取您所面对的方向。

于 2012-07-04T14:18:35.663 回答
3

尝试从加速度传感器和磁场 (G-) 传感器获得方位。

这是一个教程:http ://android-coding.blogspot.co.at/2012/03/create-our-android-compass.html

于 2012-07-04T14:19:47.553 回答
0

按照herom的回答使用链接:http ://android-coding.blogspot.co.at/2012/03/create-our-android-compass.html

我扩展了我的类来实现传感器:extends Activity implements SensorEventListener

并按照建议实施,但对其进行了修改以考虑到屏幕的方向。

这是我使用的代码:

@Override
public void onSensorChanged(SensorEvent event) {
    switch(event.sensor.getType()){
    case Sensor.TYPE_ACCELEROMETER:
        for(int i =0; i < 3; i++){
            valuesAccelerometer[i] = event.values[i];
        }
        break;
    case Sensor.TYPE_MAGNETIC_FIELD:
        for(int i =0; i < 3; i++){
            valuesMagneticField[i] = event.values[i];
        }
        break;
    }

    boolean success = SensorManager.getRotationMatrix(
            matrixR,
            matrixI,
            valuesAccelerometer,
            valuesMagneticField);

    if(success){
        SensorManager.getOrientation(matrixR, matrixValues);

        double azimuth = Math.toDegrees(matrixValues[0]);
        //double pitch = Math.toDegrees(matrixValues[1]);
        //double roll = Math.toDegrees(matrixValues[2]);

        WindowManager mWindowManager =  (WindowManager) getSystemService(WINDOW_SERVICE);
        Display mDisplay = mWindowManager.getDefaultDisplay();

        Float degToAdd = 0f;

        if(mDisplay.getRotation() == Surface.ROTATION_0)
            degToAdd = 0.0f;
        if(mDisplay.getRotation() == Surface.ROTATION_90)
            degToAdd = 90.0f;
        if(mDisplay.getRotation() == Surface.ROTATION_180)
            degToAdd = 180.0f;
        if(mDisplay.getRotation() == Surface.ROTATION_270)
            degToAdd = 270.0f;

        mapView.setFacingDirection((float) (azimuth + degToAdd)); //DEGREES NOT RADIANS
    }
}
于 2015-11-18T15:54:24.983 回答