😀
【Android】FusedLocationProviderClient の LastLocation が null になる
FusedLocationProviderClient
のLastLocation
がnull
になってしまう現象に遭遇したので、原因と解決方法を書きたいと思います。
requestLocationUpdates
を呼び出す
解決方法 : LastLocation
がnull
のときはfusedLocationProviderClient.requestLocationUpdates()
を呼び出して、位置情報を取得します。
val client = LocationServices.getFusedLocationProviderClient(context)
client.lastLocation.addOnSuccessListener { location: Location? ->
location ?: run {
val request = LocationRequest.create().apply {
interval = 5000
fastestInterval = 3000
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
client.requestLocationUpdates(
request,
object : LocationCallback() {
override fun onLocationResult(result: LocationResult) {
super.onLocationResult(result)
val lastLocation = result.lastLocation
// 何か処理を行う
_current = LatLng(lastLocation.latitude, lastLocation.longitude)
// 一度だけ取得出来ればいいので、取得後は位置情報の更新を停止する。
client.removeLocationUpdates(this)
}
},
Looper.getMainLooper()
)
}
}
なぜ null になるのか?
再起動後など「端末が一度も位置情報を取得していない」ときに発生します。
なので、GoogleMap を起動して位置情報を取得すると、LastLocation
がちゃんと返ってくるようになります。
Discussion