首页 > 解决方案 > FusedLocationProviderClient 不适用于 android 5.1

问题描述

我有一个带有 Google Places API 和 Google Maps API 的应用程序。用户可以稍后在 MapView 上选择地点并打开它。经过一些测试后,我发现 FusedLocationProviderClient 不能按预期在每个设备上工作。它在 Android 8.1(Redmi Note 5)上运行良好,但在 5.1(魅族 m3 note)上运行良好。5.1 中的问题是 LocationCallbackListener 永远不会被调用。这是代码:

override fun onMapReady(googleMap: GoogleMap?) {
        mGoogleMap = googleMap
        mLocationRequest.interval = 60000
        mLocationRequest.fastestInterval = 60000
        mLocationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
        mFusedLocationClient = LocationServices.getFusedLocationProviderClient(requireActivity())
        mLocationCallback = LocationCallbackListener()

        val placeLatLng = LatLng(mPlaceLatLng.first, mPlaceLatLng.second)
        mGoogleMap?.addMarker(MarkerOptions().position(placeLatLng).title(mPlaceName).snippet(mPlaceAddress))
        mGoogleMap?.moveCamera(CameraUpdateFactory.newLatLngZoom(placeLatLng, 15.0f))

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(requireContext(),
                            Manifest.permission.ACCESS_FINE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED) {
                //Location Permission already granted
                mFusedLocationClient?.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper())
                mGoogleMap?.isMyLocationEnabled = true
            } else {
                PermissionHelper.checkFineLocationPermission(requireActivity())
            }
        } else {
            mFusedLocationClient?.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper())
            mGoogleMap?.isMyLocationEnabled = true
        }
    }

我有一个

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

在我的清单中。

GooglePlaces API 也不显示设备位置。所以,我想我无法在任何 API 中访问位置

标签: androidgoogle-maps

解决方案


推荐阅读