使用Google Play定位服务时没有位置承载?

时间:2013-08-14 02:29:31

标签: android location google-play-services compass-geolocation

我正在使用Google Play定位服务来帮助用户沿路径导航,但我没有从Location中收到的onLocationChanged(Location location)对象获取指南针信息。我总是从hasBearing()获得错误结果,getBearing()LocationListener实现中返回0.0。

以下是我使用的代码,其中删除了噪音代码。它显示了用于创建LocationRequest的参数。代码非常愉快地跳转到LocationListener实现中,因此看起来我有一个适用于该系统部分的工作架构。

public class IncrementalNavigator {
    private LocationClient locationClient;
    private LocationRequest locationRequest;
    private float headingBearing = 0.0f;

    private LocationListener locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            Log.d(TAG, "The location has changed to " + location.toString());

            if (location.hasBearing()) {
                // I never see this updated.
                headingBearing = location.getBearing();
            }

            // ...
        }
    };


    public IncrementalNavigator(LocationClient locationClient) {
        this.locationRequest = LocationRequest.create();
        this.locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        this.locationRequest.setInterval(5000);
        this.locationRequest.setFastestInterval(1000);
        this.locationClient = locationClient;
        this.headingBearing = locationClient
                .getLastLocation()
                .getBearing();

        // ...
    }

    public void setWalkingDirections(WalkingDirections walkingDirections) {
        // ...

        if (walkingDirections != null) {
            // ...
            this.locationClient.requestLocationUpdates(locationRequest, locationListener);
        } else {
            this.locationClient.removeLocationUpdates(locationListener);
        }
    }
    // ...
}

我的AndroidManifest.xml声明了以下权限:

<uses-permission android:name="android.permission.ACCESS_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

我在使用Android 4.3的Galaxy Nexus上运行代码作为Service的一部分。 WiFi已开启且GPS已开启。我的问题是:为什么我没有收到轴承更新?

1 个答案:

答案 0 :(得分:1)

此代码功能正常,它不是获取罗盘承载数据的正确方法。在户外使用应用程序并获得GPS修复后,我能够获得新的读数。我已经重新阅读了documentation并且已经意识到位置上的方位不是罗盘方位(即北方 0.0),而是水平方向。