【Kotlin/Android】現在地の位置情報を取得する方法!FusedLocation

この記事からわかること
- Kotlin/Android Studioで現在地の位置情報を取得する方法
- FusedLocationの使い方
- 定期的に位置情報を取得するには?
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Koala
- Kotlin:1.8.20
現在値の位置情報を取得する方法
Androidアプリで現在値の位置情報を取得するにはGoogleが提供しているLocation SDK(FusedLocation)
を使用します。取得できる位置情報は緯度と経度情報を含んだLocation
オブジェクトになります。
まずは「ボタンをクリックしたタイミングで現在の位置情報を取得する処理」を実装してみます。
実装の流れ
- FusedLocationの導入
- パーミションの追加
- 許可申請
- 現在値を取得
1.FusedLocationの導入
まずはプロジェクト内でSDKを使用できるように「build.gradle(Module)」に以下を追加します。
2.パーミションの追加
続いて位置情報を取得できるようにパーミションを追加します。バックグラウンドでも取得したいならACCESS_BACKGROUND_LOCATION
を追加します。
公式リファレンス:android.permission.ACCESS_FINE_LOCATION
公式リファレンス:android.permission.ACCESS_COARSE_LOCATION
公式リファレンス:android.permission.ACCESS_BACKGROUND_LOCATION
3.許可申請
続いて位置情報の許可をユーザーにリクエストします。
4.現在値を取得
実際に現在値を取得するにはlastLocation
からaddOnSuccessListener
を呼び出し、ラムダ式の引数でLocation
オブジェクトとして取得することができます。ただしここで取得できるのはあくまで最後に取得していた位置情報であって位置情報を取得することを要求しているわけではないので注意してください。
定期的に位置情報を取得する
位置情報は常に変化していくものなので、定期的に位置情報を取得するように実装してみたいと思います。これを叶えるためには以下のクラスが必要になってきます。
LocationRequest
LocationRequest
は位置情報取得において、位置情報の取得頻度や精度、タイムアウトなどの設定するオブジェクト。
LocationCallback
LocationCallback
は位置情報の更新を受け取るためのコールバッククラス。
実装の流れ
- LocationRequestの作成
- LocationCallbackの実装
- requestLocationUpdatesメソッドの実行
1.LocationRequestの作成
LocationRequest
を作成して位置情報を取得する間隔などの設定を行います。Builder
メソッドの第一引数にはPriority
で位置情報の精度を、第二引数にはLong
で更新間隔をミリ秒数で渡します。
設定できる精度は以下のようになっています。
- PRIORITY_HIGH_ACCURACY:GPSを使用して高精度の位置情報
- PRIORITY_BALANCED_POWER_ACCURACY:Wi-Fiやネットワークを使用して、バッテリー消費を抑えた位置情報
- PRIORITY_LOW_POWER:精度は低いが、最もバッテリー効率の良いモード
- PRIORITY_PASSIVE:自身からリクエストを出さないが、他のアプリからの位置更新があれば受信
2.LocationCallbackの実装
続いて位置情報を取得した際に実行したい処理をLocationCallback
型で定義します。
3.requestLocationUpdatesメソッドの実行
最後にrequestLocationUpdates
メソッドを使用して 位置情報の更新と観測を開始します。引数にLocationRequest
とLocationCallback
を渡し、コールバックを実行したいスレッドを3つ目に渡します。
これで定期的に位置情報を取得する処理が実装できました。実際に5秒ごとに位置情報が取得できているか試してみてください。
バックグラウンドスレッドで実行したい場合
おまけでバックグラウンドスレッドで実行したい場合は以下のように実装すればOKです。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。