Android 11:如何获取当前位置
Posted
技术标签:
【中文标题】Android 11:如何获取当前位置【英文标题】:Android 11: how to get current location 【发布时间】:2021-02-05 13:28:01 【问题描述】:我想在用户点击某物时获取设备的当前位置。我不需要持续更新。
FusedLocationProviderClient.getLastLocation()
对我来说不是一个选项,因为它只返回最后一个位置,可能与当前位置不同,或者返回 null,这种情况发生的频率比我所相信的要多得多。
下面的这段代码在 android 10 之前完成了我希望它完美完成的工作。在 Android 11 上它不再工作了。
@RequiresPermission(value = Manifest.permission.ACCESS_FINE_LOCATION)
private fun locationPermissionGranted()
val fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireContext())
//create location request
val locationRequest = LocationRequest.create().apply
interval = 1000L
fastestInterval = 100L
numUpdates = 1
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
//create callback
val mLocationCallback = object : LocationCallback()
override fun onLocationResult(locationResult: LocationResult?)
useLocation(locationResult?.lastLocation)
fusedLocationProviderClient.removeLocationUpdates(this)
override fun onLocationAvailability(locationAvailability: LocationAvailability?)
if (locationAvailability?.isLocationAvailable == false)
Toast.makeText(context, R.string.error_couldnt_get_location, Toast.LENGTH_SHORT).show()
fusedLocationProviderClient.removeLocationUpdates(this)
else
super.onLocationAvailability(locationAvailability)
//request location update
fusedLocationProviderClient
.requestLocationUpdates(locationRequest, mLocationCallback, Looper.getMainLooper())
.let task ->
task.addOnCanceledListener
Toast.makeText(context, R.string.error_couldnt_get_location, Toast.LENGTH_SHORT).show()
task.addOnFailureListener exception ->
Toast.makeText(context, R.string.error_couldnt_get_location, Toast.LENGTH_SHORT).show()
task.addOnSuccessListener
在 Android 11 上,onLocationResult
永远不会被调用。即使我删除了onLocationAvailability
中的所有内容,onLocationResult
仍然不会被调用。
那么,如何在 Android 11 上正确请求设备的当前位置?
编辑:
FusedLocationProviderClient.getCurrentLocation()
也不起作用。没有调用任务的回调。
【问题讨论】:
在我的情况下,直到我将“numUpdates = 1”更改为“numUpdates = 2”后它才起作用,但这对我来说是个谜 【参考方案1】:我错了。 FusedLocationProviderClient.getCurrentLocation()
和 FusedLocationProviderClient.requestLocationUpdates()
都可以在 Android 11 上运行。除非用户打开“Wi-Fi 扫描”、“蓝牙扫描”和最重要的“谷歌位置准确性”,否则它们的速度非常慢。用户激活“使用位置”是不够的。
【讨论】:
速度在我看来是一样的。关于你为什么回答这个问题的任何细节?以上是关于Android 11:如何获取当前位置的主要内容,如果未能解决你的问题,请参考以下文章