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