0

我正在尝试在 Android 设备上使用 LocationEngine 获取用户位置,但是当我为应用程序加注星标时,用户的标记位于 (0.0, 0.0) 并且永远不会更新它的位置。这怎么可能?

我尝试复制示例位置层

private void enableLocationPlugin() {

    // Check if permissions are enabled and if not request
    if (PermissionsManager.areLocationPermissionsGranted(this)) {

        // Create an instance of LOST location engine
        initializeLocationEngine();
        LocationLayerOptions options = LocationLayerOptions.builder(this)
                .build();
        locationLayerPlugin = new LocationLayerPlugin(mapView, mapboxMap, locationEngine, options);
        locationLayerPlugin.setRenderMode(RenderMode.COMPASS);
        locationLayerPlugin.setCameraMode(CameraMode.TRACKING);
        locationLayerPlugin.setLocationLayerEnabled(true);
    } else {
        permissionsManager = new PermissionsManager(this);
        permissionsManager.requestLocationPermissions(this);
    }
}


private void initializeLocationEngine() {
    locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
    locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
    locationEngine.setInterval(1000);
    locationEngine.setFastestInterval(500);
    locationEngine.addLocationEngineListener(this);
    locationEngine.activate();
    locationEngine.requestLocationUpdates();


    Location lastLocation = locationEngine.getLastLocation();
    if (lastLocation != null) {
        setCameraPosition(lastLocation);
        locationEngine.addLocationEngineListener(this);
    } else {
        locationEngine.addLocationEngineListener(this);
    }
}

我在 Grandle 中使用这个版本的 MapBox

implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-building:0.2.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation:0.12.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:0.5.2'

4

2 回答 2

2

我有同样的问题。问题是您正在尝试获得高精度位置。高精度应结合使用 GPS、蜂窝数据、WiFi 等来获得最准确的位置;但由于某种我不知道的原因,它不起作用。

有四个选项:

NO_POWER

低电量

BALANCED_POWER_ACCURACY

高准确率

我更改了这行代码:

locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);

对此:

locationEngine.setPriority(LocationEnginePriority.BALANCED_POWER_ACCURACY);

它奏效了!

于 2018-07-07T07:44:11.920 回答
0

关于您的代码片段的一些注释。

LocationLayerOptions options = LocationLayerOptions.builder(this)
            .build();

不需要,因为您实际上并没有更改任何选项。

locationLayerPlugin.setLocationLayerEnabled(true);

不需要,因为您在setRenderMode上面调用它会自动启用它

在https://github.com/mapbox/mapbox-plugins-android/issues/460中已经报告了在 nullisland (0.0, 0.0) 上查看用户位置的问题。

对于位置更新,看起来您正在附加一个侦听器。您是否在该侦听器中收到更新,而位置层只是没有更新,或者您根本没有收到任何更新?如果是后者,则更有可能是 locationEngine 而不是 Location Layer Plugin 的问题。

于 2018-05-16T14:49:50.853 回答