😀

【Android】FusedLocationProviderClient の LastLocation が null になる

2021/03/02に公開

FusedLocationProviderClientLastLocationnullになってしまう現象に遭遇したので、原因と解決方法を書きたいと思います。

解決方法 : requestLocationUpdatesを呼び出す

LastLocationnullのときは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