gpt4 book ai didi

安卓 11 : how to get current location

转载 作者:行者123 更新时间:2023-12-05 06:59:02 31 4
gpt4 key购买 nike

我想在用户单击某项时获取设备的当前位置。我不需要持续更新。

FusedLocationProviderClient.getLastLocation()对我来说不是一个选项,因为它只返回最后一个位置,它可能与当前位置不同,或者返回 null,这比我相信的 doucentation 更频繁地发生。

下面的这段代码在 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()也不起作用。没有调用任何任务的回调。

最佳答案

我错了。 FusedLocationProviderClient.getCurrentLocation()FusedLocationProviderClient.requestLocationUpdates() 都可以在 Android 11 上运行。除非用户有“Wi-Fi 扫描”、“蓝牙”,否则它们会非常慢扫描”,最重要的是“谷歌定位精度”已打开。用户激活“使用位置”是不够的。

关于安卓 11 : how to get current location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64483779/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com