Mapbox не показывает реальное местоположение на эмуляторе Android - PullRequest
0 голосов
/ 06 июля 2019

Mapbox не имеет проблем с отображением текущего местоположения с LocationComponent на моем реальном устройстве (Samsung S8), однако я пробовал несколько эмуляторов (Pixel 2, 3, 3XL) с Android Pie / Q, и на карте всегда отображается Google Штаб, а не реальное местоположение:

enter image description here

Вот мой код:

class MapFragment : Fragment(), LocationEngineCallback<LocationEngineResult> {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        mapView = view.findViewById(R.id.mapView)
        mapView?.onCreate(savedInstanceState)
        mapView?.getMapAsync { mapboxMap ->
        mapbox = mapboxMap
            mapbox.setStyle(Style.MAPBOX_STREETS) {
                style -> showUserLocation(style)
            }
        }

...

@SuppressWarnings("MissingPermission")
private fun showUserLocation(style: Style){
    Log.d(TAG, "showUserLocation")
    if (PermissionsManager.areLocationPermissionsGranted(homeActivity)){
        val locationComponentOptions = LocationComponentOptions.builder(homeActivity)
            .bearingTintColor(Color.WHITE)
            .accuracyAlpha(0.1f)
            .build()

        val locationComponentActivationOptions = LocationComponentActivationOptions
            .builder(homeActivity, style)
            .locationComponentOptions(locationComponentOptions)
            .useDefaultLocationEngine(true)
            .build()

        locationComponent = mapbox.locationComponent
        locationComponent?.activateLocationComponent(locationComponentActivationOptions)
        locationComponent?.isLocationComponentEnabled = true
        locationComponent?.cameraMode = CameraMode.TRACKING
        locationComponent?.renderMode = RenderMode.COMPASS
        createLocationEngine()
        Toast.makeText(homeActivity, "Show location", Toast.LENGTH_LONG).show()
        Log.d(TAG, "Show location")
    } else {
        Toast.makeText(homeActivity, "Permissions not granted", Toast.LENGTH_LONG).show()
    }

}

...

@SuppressWarnings("MissingPermission")
private fun createLocationEngine(){
    locationEngine = LocationEngineProvider.getBestLocationEngine(homeActivity)
    val request = LocationEngineRequest.Builder(LOCATION_INTERVAL)
        .setFastestInterval(LOCATION_INTERVAL)
        .setPriority(LocationEngineRequest.PRIORITY_HIGH_ACCURACY)
        .setMaxWaitTime(MAX_WAIT_TIME)
        .build()
    locationEngine?.getLastLocation(this)

}

fragment.xml

<com.mapbox.mapboxsdk.maps.MapView
    android:id="@+id/mapView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    mapbox:mapbox_cameraZoom="@integer/defaultZoom"
    mapbox:mapbox_cameraBearing="34.33"
    mapbox:mapbox_cameraZoomMax="@integer/defaultZoom"
    mapbox:mapbox_cameraZoomMin="@integer/defaultZoom"
    mapbox:mapbox_uiRotateGestures="false"
    mapbox:mapbox_uiTiltGestures="false"
    mapbox:mapbox_uiScrollGestures="false"
    mapbox:mapbox_uiDoubleTapGestures="false" />

Есть идеи, почему он не работает на эмуляторе?

Вот эмуляторы, которые я использовал:

enter image description here

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Эмуляторы не могут определять местоположение в режиме реального времени, но вы можете установить координаты через плагин Эмулятор GPS.View this Image

1 голос
/ 06 июля 2019

Эмуляторы используют макеты . Поскольку они используются только для целей разработки, использование фиктивного местоположения имеет смысл. Вы можете установить любое местоположение для эмулятора (ваше реальное местоположение также). Для этого нажмите тройную точку ( ... ) в нижней части кнопок контроллера эмулятора. В открывшемся окне вы можете увидеть поля широта и долгота . См:

example

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...