[Android] FusedLocationProviderClient を使って位置情報を取得

測位、位置情報はGPSで取得するというのが一般的に知られていますが、GPSには苦手な状況や何より電力を食います。
それをカバーするためにWifi、電話基地局などによって位置情報を得ることもできます。
それぞれGPS、Wifi、電話基地局の切り分けをプログラマーがいちいちコードで記述するのは大変です。
 
Screen Shot 2013 05 27 at 4.49.06 PM - [Android] FusedLocationProviderClient を使って位置情報を取得
 
これを、このようにまとめるのがFusedLocationProviderです。
 
Screen+Shot+2013 05 27+at+5.07.28+PM - [Android] FusedLocationProviderClient を使って位置情報を取得
 
クラスとしてはFusedLocationProviderClientを使うと自動的に切り替えてくれます。
なお、以前はFusedLocationProviderApiを使っていました。
2017/夏頃から様子がおかしかったのでしたが正式に非推奨となりました。
 
fusedlocationprovider 01 - [Android] FusedLocationProviderClient を使って位置情報を取得

Android Studio 3.1.4
Android 8.0

 



FusedLocationProviderClient

 
Manifestに以下のGPSなどのACESS設定と Google play services の設定が必要です
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
これらは、Android 6.0 Runtime Permissionに該当するため
アプリ起動後に許可を得るように設定します

テストだけであれば起動後に端末設定からアプリを開いて許可すれば可能です
あくまでテストですから、リリースしたい人はここで楽をしない方がいいでしょうね

許可しない場合に例外で落ちないように実装しないといけませんので、以下のようなフローを想定して作成していきます。
 

permission 1 300x254 - [Android] FusedLocationProviderClient を使って位置情報を取得

  • APIが23以上か否か
    • False: そのまま処理実行
  • 許可しているか否か、checkSelfPermission(…)
    • 許可していない場合や、初回起動のケースは次に行く
      • 初めは許可していたが、途中で拒否をユーザーが選択するケースもあり得ることに注意
    • 許可しているケースは処理に移る
  • Permissionが何に使われるか説明して許可してもらうように依頼する
    • 拒否された場合はこの機能については動作しないが他の処理をする
      • 例えばゲームアプリで得点をネットにアップするとき、ユーザーの位置情報もアップしたいという要請に対して拒否しても、ゲームは継続されるということです。
    • 許可されて処理の実行

 
マニフェストに「ACCESS_FINE_LOCATION」と「ACCESS_COARSE_LOCATION」を入れ「google_play_services_version」をmeta-dataで設定します。

AndroidManifest.xml

 
Google play services のライブラリーを build.gradle のdependenciesに設定します。バージョンは適宜変更してください。バージョンはとても重要です。
 
build.gradle

 
MainActivityでPermissionの確認をして、許可された場合にLocationActivityにIntentで移行して位置情報の取得に入ります。

MainActivity.java

 
Permissionを確認した後に実行する本体
LocationActivity.java

 
activity_main.xml

 
リソース
strings.xml

 
実機で実行すると
 
fusedlocationprovider 01 - [Android] FusedLocationProviderClient を使って位置情報を取得
 
なお、これはあくまでforgroundで機能します。backgroundに入って使いたい場合はスケジューリングが必要です。
 

FusedLocationProviderApi

 
FusedLocationProviderApiを使っていたコードです。LocationActivityとbuild.gradleの部分が異なり他は同じです。

 

LocationActivity.java

 
build.gradle

 

 

関連ページ:

 

References:

アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう、時間の制約がないところが一番の魅力です。

以下の3つはAndroidが学習できるオンラインスクールです。


TECH ACADEMY
Androidアプリコース



侍エンジニア塾
侍エンジニア塾 無料体験レッスン



CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp





正直ネットや本では限界があります。直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。

尚、スクールがダメだと言う人がいますが、やる気があれば問題ありません。与えられるのを待っていてはいけないですね
欲しいものは取りに行くのです。


誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加




Google Pixel 3 XLグローバル版
SIMフリー 並行輸入品
6.3インチの大画面
背景をぼかすポートレートモード撮影

Anker PowerCore II Slim 10000
Power IQ 2.0搭載
iPhone & Android対応

シェアする

  • このエントリーをはてなブックマークに追加

フォローする