【发布时间】:2020-11-23 03:56:39
【问题描述】:
我正在使用FusedLocationProviderClient 获取 GPS 位置,但我注意到它通常是null,尤其是在前几个位置拉动时。它是否需要初始化才能在第一次尝试时拉取位置?这是我正在使用的代码,它有时有效,但似乎不是第一次。
val locationManager: LocationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
if((ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) && (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))) == PackageManager.PERMISSION_GRANTED) {
var fusedLocationProviderClient: FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
fusedLocationProviderClient.lastLocation.addOnCompleteListener(this) { task ->
val location: Location? = task.result
if(location != null) {
latitude = location.latitude.toString()
longitude = location.longitude.toString()
} else {
val locationRequest = LocationRequest()
locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
locationRequest.interval = 0
locationRequest.fastestInterval = 0
locationRequest.numUpdates = 1
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallBack, Looper.myLooper())
}
}
}
}
private val locationCallBack = object : LocationCallback() {
override fun onLocationResult(p0: LocationResult) {
val location: Location? = p0?.lastLocation
if(location != null) {
latitude = location.latitude.toString()
longitude = location.longitude.toString()
}
}
}
【问题讨论】:
标签: android android-location android-gps fusedlocationproviderclient