您可以在特定的时间间隔内获取位置更新,而不是获取最后一个已知位置。这是代码。
声明这些融合的位置提供者类和位置回调类
private var mFusedLocationProviderClient: FusedLocationProviderClient? = null
private var mLocationRequest: LocationRequest? = null
private var mLocationCallback: LocationCallback? = null
private const val LOCATION_REQUEST_INTERVAL: Long = 5000
`
这是定位请求的必要方法
private fun createLocationRequest() {
mLocationRequest = LocationRequest.create()
mLocationRequest!!.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
mLocationRequest!!.setInterval(LOCATION_REQUEST_INTERVAL).fastestInterval =
LOCATION_REQUEST_INTERVAL
requestLocationUpdate()
}
private fun requestLocationUpdate() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED ) {
Log.e("permission", "denied");
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return
}
mFusedLocationProviderClient!!.requestLocationUpdates(
mLocationRequest,
mLocationCallback,
Looper.myLooper()
)
}
然后在onCreate()中调用这些“createLocationRequest”方法和位置回调类。
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireContext())
createLocationRequest()
mLocationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
super.onLocationResult(locationResult)
val lat = locationResult.lastLocation.latitude
val lng = locationResult.lastLocation.longitude
}
}
并根据您的要求删除 onPause() 或 onDestory() 中的位置更新侦听器。
mFusedLocationProviderClient!!.removeLocationUpdates(mLocationCallback)