FusedLocationProviderClientのLastLocationがnullになる

1 min read読了の目安(約1400字

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

解決方法: nullのときはrequestLocationUpdates

LastLocationnullのときは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になるんだ...?」

と、ハマってしまうことがよくあったので、書いてみました。

誰かのお役に立てれば幸いです٩( 'ω' )و