【最寄り駅サーチ】位置取得の方法が変わります
みなさんどうもです。最寄り駅サーチを開発しているりくちんです。
さて、今回は最寄り駅サーチの根幹ともいえる「位置情報の取得方法」を変更するため、事前にお知らせをさせていただくことにしました。
これまでの取得方法
初版から現在のv1.6.6では、Android OSが用意した位置情報サービスである Location Manager を利用しています。アプリはLocation Managerが用意した手段の中から1つずつを選び、位置情報が取得された時点でアプリに通知される仕組みとなっています。
この手法はアプリをリリースした2015年当時ではスタンダードとなっていたのですが、2017年現在ではGoogleから「非推奨」とされており、この手法を将来的に使用することができなくなってしまいました。
また、この手法ではGPSとnetworkから同時に位置情報が通知されることがあり、GPSから正確な通知がされているあいだはnetworkの情報を破棄するなど、アプリ側での調整も必要でした。たまにGPSとnetworkが交互に通知されるのはこれが原因となっています。
変更予定の取得方法
現在は Location Manager を直接呼び出すのではなく、Google Playサービスが用意している位置情報サービス Fused Location API を利用するよう周知されています。最寄り駅サーチでもこの手法を採用します。
Fused Location APIはGPSやWi-Fi、基地局から取得できる情報をもとに最適な位置情報を算出し、アプリへ提供します。これまでのGPSやWi-Fiからの情報はGoogle Playサービスがすべて引き取ります。アプリからはGoogle Playサービスへ接続し、Fused Location APIを1回呼び出すだけで位置情報を利用することができます。これまでのアプリ側での調整がなくなり、実装がシンプルになります。
変更による影響について
位置取得方法を変更したことで、次の影響が考えられます。
- 取得方法が1つにまとめられたことで、どの情報をもとに取得されたのかがわからなくなる
取得プロバイダがすべて fused になってしまうため、GPSから、networkからといった情報を表示させることができなくなります。メイン画面の精度に表示されている (GPS)(network)(fused)の表示はとりやめます。 - 他のGoogle Playサービスを利用したアプリと取得位置が同じになる
Google Mapアプリなどが示している位置と同期するようになります。利用されているみなさんが一緒に起動しているあのアプリとも、地下での位置飛びまで同期していることを確認しています。 - 位置取得開始後、最初に位置を求めるのが遅くなる可能性がある
最後に取得した位置を求める方法があるので、取得が成功するまでそちらを利用する方向で実装を予定しています。 - パーミッションを要求してくる可能性がある
Android 6.0以上では位置情報を利用するために事前にパーミッション(位置情報利用許可)の確認をしなければいけません。位置情報を許可していない場合は位置情報サービスを利用しないようにします。 - アプリの起動が若干が遅くなる
Google Playサービスを呼び出すため、アプリを最適化する機能が弱いAndroid 5.0未満の機種ではアプリの起動が遅くなる可能性があります。Android 4.2と4.4の機種で動作確認を行っています。
もうひとつおしらせ
アプリの開発環境を Eclipse から Android Studio に変更しました。
Eclipseによる開発環境は2015年にすでに打ち切られているものの、ドキュメントが少ないAndroid Studioへの移行にいまいち踏ん切りがつかなかったのですが、現在ではサイトの掲載やQ&Aなどの情報はAndroid Studioが常識となり、今回の位置情報取得方法の変更やGoogleマップの利用、パーミッションの確認もAndroid Studio環境でないと対応できなくなっていたので、これを機に変えることにしました。
変更したことによって比較的古いOSバージョンで動作しないのではと気になっていましたが、Android 4.2 で作られているウォークマン(NW-ZX2)でも動作しています。ただしそのままではビルドエラーが頻発したので調整は行っています。
リリース時期について
次のv1.6.7は3月3日までのリリースを目標にしています。
今回の位置取得方法変更のほかに、Android Studio化にともなうGoogleマップ実装の調整、3月のJRダイヤ改正に向けた新駅・廃駅のデータ更新、大阪環状線福島~野田付近・北鉄金沢付近の領域図不具合の修正を予定しています。
(参考サイト)
LocationManagerはもう古い!Google Service の Location APIを使って現在位置を取得する
http://sakura-bird1.hatenablog.com/entry/2016/11/27/224200