0

LocationGoogle Play 位置情報サービスを使用してユーザーがパスに沿って移動できるようにしていますが、 で受信したオブジェクトからコンパス方位情報を取得できませんonLocationChanged(Location location)。私の実装では、常に false の結果が返されhasBearing()getBearing()0.0 が返さLocationListenerれます。

以下は、ノイズコードを取り除いて使用しているコードです。を作成するために使用されるパラメータを示しています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"/>

ServiceAndroid 4.3 を搭載した Galaxy Nexus の一部としてコードを実行しています。WiFi がオンで、GPS がオンになっています。私の質問は、ベアリングの最新情報を受信して​​いないのはなぜですか?

4

1 に答える 1

1

このコードは機能しますが、コンパスの方位データを取得する正しい方法ではありません。アプリを屋外に持ち出し、GPS を修正した後、新しい測定値を取得することができました。その後、ドキュメントを読み直して、場所の方位がコンパスの方位 (北が0.0ではない) ではなく、水平方向の移動であることに気付きました。

于 2013-08-14T05:13:17.350 に答える