首页 > 解决方案 > UserLocation 不起作用

问题描述

我正在尝试在 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'

标签: androidmapboxmapbox-android

解决方案


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

有四个选项:

NO_POWER

低电量

BALANCED_POWER_ACCURACY

高准确率

我更改了这行代码:

locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);

对此:

locationEngine.setPriority(LocationEnginePriority.BALANCED_POWER_ACCURACY);

它奏效了!


推荐阅读