【发布时间】: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”后它才起作用,但这对我来说是个谜
标签: android android-gps android-11