首页 > 解决方案 > 如何使用 Mapbox Kotlin 在真实设备上显示当前位置

问题描述

在我的模拟器上,我已经能够显示假位置,但是当我在真正的 android 设备上尝试我的应用程序时,位置没有显示,我不知道我的代码有什么问题我从 Mapbox 获得了这个代码网站并在遵循 Mapbox 文档之后在此处显示用户的位置 我想出了什么

class UserLocationActivity : AppCompatActivity(), PermissionsListener, OnMapReadyCallback {

    private var mapView: MapView? = null
    private var map: MapboxMap? = null

    private var permissionManager: PermissionsManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        Mapbox.getInstance(this, getString(R.string.access_token))

        setContentView(R.layout.activity_user_location)

        mapView = findViewById(R.id.usermapview)
        mapView?.onCreate(savedInstanceState)

        mapView?.getMapAsync { mapboxMap ->

            map = mapboxMap
            enableLocation(map?.style!!)
            mapboxMap.setStyle(Style.MAPBOX_STREETS) {

            }

        }

    }

    @SuppressLint("MissingPermission")
    fun enableLocation(style: Style){
        if (PermissionsManager.areLocationPermissionsGranted(this)) {
            val customLocationComponentOptions = LocationComponentOptions.builder(this)
                .trackingGesturesManagement(true)
                .accuracyColor(ContextCompat.getColor(this, R.color.mapbox_blue))
                .build()

            val locationComponentActivationOptions = LocationComponentActivationOptions.builder(this, style)
                .locationComponentOptions(customLocationComponentOptions)
                .build()


            map?.locationComponent?.apply {

                // Activate the LocationComponent with options
                activateLocationComponent(locationComponentActivationOptions)

                // Enable to make the LocationComponent visible
                isLocationComponentEnabled = true

                // Set the LocationComponent's camera mode
                cameraMode = CameraMode.TRACKING

                // Set the LocationComponent's render mode
                renderMode = RenderMode.COMPASS

            }

            } else {
            permissionManager = PermissionsManager(this)
            permissionManager?.requestLocationPermissions(this)
        }
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>,
                                            grantResults: IntArray) {
        permissionManager?.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }

    override fun onExplanationNeeded(permissionsToExplain: MutableList<String>?) {
        Toast.makeText(this, "text", Toast.LENGTH_LONG).show()
    }

    @SuppressLint("MissingPermission")
    override fun onPermissionResult(granted: Boolean) {
        if (granted) {
            enableLocation(map?.style!!)
        } else {
            Toast.makeText(this, "text", Toast.LENGTH_LONG).show()
            finish()
        }
    }


    override fun onMapReady(mapboxMap: MapboxMap) {
        enableLocation(map?.style!!)
    }

}

标签: androidkotlinmapbox

解决方案


推荐阅读