Google Play Serviceで提供するLocationライブラリに位置情報を取得することができます。
この記事では、簡単なサンプルコードを紹介します。
Android Developerで提供される文書を見れば、より詳細な使用方法を得ることができます。
Android FrameworkのLocationManagerを使用して位置情報を取得することもできます。
依存性の設定
Appの build.gradle
のdependenciesに次のようにplay-services-location
を追加すると、Locationライブラリを使用することができます。
dependencies {
...
implementation 'com.google.android.gms:play-services-location:17.1.0'
}
Locationパーミッション
位置情報を取得するには、次のパーミッションのいずれかは、AndroidManifestに定義する必要があります。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
ACCESS_COARSE_LOCATION
:都市Block単位の精度の位置情報を取得することができますACCESS_FINE_LOCATION
:ACCESS_COARSE_LOCATION
より精密な位置情報を得ることができます
Runtime Permission要求の詳細実装は、Android - Runtime permissionリクエスト方法を参照してください。
最後に確認された位置情報を取得する
FusedLocationProviderClientオブジェクトは、次のように得ることができます。
val fusedLocationClient: FusedLocationProviderClient!
= LocationServices.getFusedLocationProviderClient(this)
FusedLocationProviderClientで最後に保存された位置情報を取得することができます。
fusedLocationClient.lastLocation.addOnSuccessListener { location : Location? ->
if (location != null) {
val latitude = location.latitude
val longitude = location.longitude
Log.d("Test", "GPS Location Latitude: $latitude" +
", Longitude: $longitude")
}
}
LocationServiceは、位置情報をキャッシュし、 lastLocation.addOnSuccessListener()
最後にキャッシュされた位置情報を取得します。
次のような場合にnullが返されることがあります。
- デバイスのLocation使用が中止されている場合は、キャッシュ情報が削除されるため、nullが返されることがあります
- 位置情報を取得したことがないとき、nullが返されることがあります
- Google Playサービスが再実行されたとき、保存された位置情報がないため、nullが返されることがあります
位置情報の変更のイベント受信
次のように位置情報が更新されるたびにイベントを受け取ることができます。
まず、アップデートIntervalなどのオプションが保存されてLocationRequestとLocationCallbackを作成し、 requestLocationUpdates()
に変更のCallbackを求めることができます。
val locationRequest = LocationRequest.create()
locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
locationRequest.interval = 20 * 1000
fusedLocationClient.requestLocationUpdates(locationRequest,
locationCallback,
Looper.getMainLooper());
val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
if (locationResult == null) {
return
}
for (location in locationResult.locations) {
if (location != null) {
val latitude = location.latitude
val longitude = location.longitude
Log.d("Test", "GPS Location changed, Latitude: $latitude" +
", Longitude: $longitude")
}
}
}
}
Callback登録解除
さらに位置情報を取得する必要がない場合は、次のようにサービスに登録されたCallbackを解除することができます。
fusedLocationClient.removeLocationUpdates(locationCallback);
参考
Related Posts
- Android - FusedLocationProviderClientに位置情報を取得する
- Android - GPS、Network位置情報を取得する(LocationManager)
- Android - adbコマンドでActivity実行
- アンドロイド - MediaStoreにメディアファイルを保存する方法
- Android - Runtime permissionリクエスト方法と例(kotlin)
- Android11 - Storage(ストレージ)の変更まとめ
- Jetpack Compose - RowとColumn
- Android 13 - 細かいメディアファイルの権限
- Android 13でNotification権限をリクエスト、通知を表示する
- エラー解決:android gradle plugin requires java 11 to run. you are currently using java 1.8.
- Query method parameters should either be a type that can be converted into a database column or a List
- Android - TabLayoutの実装方法(+ ViewPager2)
- Android - adbコマンドで特定のパッケージのプロセスの終了
- Android - adb push、pullでファイルのコピー、ダウンロード
- Android - adbコマンドでsettings value確認、変更、
- Android 12 - IntentFilterのexported明示的な宣言
- Android - adb logcatコマンドでログ出力
- Android - ACTION_BOOT_COMPLETEDイベント受信
- Android - Foreground Service実行
- Android - ファイル入出力の例(Read、Write、内部、外部ストレージ)
- Android - アプリの権限を確認(Permission check)
- Android - adbで実行中のプロセス、スレッドリスト及びメモリ情報の確認
- Android - Broadcast Receiver登録およびイベントの受信方法
- Android - Cleartext HTTP ... not permitted例外解決方法
- Androidのビルドエラー - Calls to Java default methods are prohibited in JVM target 1.6
- アンドロイド - Assetsでファイルを読み取る方法
- アンドロイドのさまざまなNotification種類と実装方法
- アンドロイド - INSTALL_FAILED_TEST_ONLYエラー解決方法
- Android EspressoのCustom Matcher実装方法
- Android Espressoを使用してUIをテストする方法(3)
- アンドロイド - CTS hostsideをgradleで構築する方法
- Androidのアプリのデータフォルダーのパスと内部/外部ストレージ説明
- アンドロイド - 最初のApp作成
- Androidをインストールする方法(Windows)