いももちのきもち

悪戦苦闘の歴史のメモ

LocationのgetSpeedはNaNを返すことがある

仕事で得た知識をもっと外に出しておこうと思ったので気が変わらないうちに書いておく。



https://developer.android.com/reference/android/location/Location#getSpeed()
たとえばFusedLocationProviderClient.requestLocationUpdatesで位置情報としてLocationを得たときに、getSpeedはNaNを返すことがある(週に数件は見た)。
返り値はfloatなので、floatであるNaNが返り得るのはわかるが、どういうときにNaNが返るかはわからなかった(位置情報測定開始後、初回はspeed=0.0になる)。

This is only valid if hasSpeed() is true.

getSpeed()の前にhasSpeed()チェックをかませるのが想定実装だったようだが、実際プロダクトではisNaN()でNaNのときは0.0に置き換える対応でその後の問題発生を回避した。