お題:navigator.geolocation.getCurrentPositionで位置情報が取得出来なかった時の対処法
開発中のアプリをandroidに入れていて、動作確認のために色々動かしていたのですが
位置情報を取得するページに移動したところ画面が変化しない。
デバッグしてみると、位置情報がとれていないっぽい。
cordovaで位置情報といえばgeolocation君しかいないので確実にこいつがやらかしていることは
間違いない。
なぜこいつが悪かったというと、コールバックの中だけconsole.logが機能しない(途切れる)から。
そのコールバックでnavigator.geolocation.getCurrentPositionという関数を実行しているのですが
この関数の中でsuccess時に位置情報を取得してstateに渡しています。このstateを渡す前のconsole.log
が効かなくなっているので特定はし易かったのですが回答手段が皆目見当がつかない。
geolocationの周辺は何もいじっていないのでnavigator.geolocation.getCurrentPositionの仕様が
変わったと思ったのですがiphoneではきちんと動くことが実証できました。
スタックオーバーフローを見るとSSLが使える環境でないと現在地を取得できない仕様になっているという
情報が見受けられたのですが、今の環境では該当しないのでこの線は消えました。
残った線としてデバイスの設定がやらかしているケースを考えたのですが、ここも触った覚えはなし。
コード周りは全て見たので念のため触ってみることに。位置情報を調整したかったのでロック画面とセキュリティを開いて
位置情報を「高精度」に変更後アプリを再起動。すると、位置情報を正常に取得することができました。
結局デバイスの問題かいな。。。とげんなりしましたが内心は仕様変更でなくてよかったとびくびくしていました。
という訳で今回のnavigator.geolocation.getCurrentPositionが動かない時の対処法は
①ロック画面とセキュリティを開く
②プライバシーの位置情報を開く
③モードで「高精度」を選択
以上で解決できます。
もちろんデバイスの設定でなく、オプションで”enableHighAccuracy”がfalseになっていたりwifiがオフになっていても
位置情報は取得できなくなるのでその周辺をよく見た上での処置をおすすめします。