Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Kotlin】AndroidのLocation APIで現在地を追跡・表示する方法を徹底解説

本記事では、AndroidアプリでKotlinを使用し、Google Maps SDK(Location API)を活用して現在地を追跡・表示する方法を解説します。ステップごとにコード例を紹介するので、初心者の方でもそのまま手を動かして試せる内容です。

実装の全体像

大まかな流れは以下の4ステップです。

  1. Android Studioで新規プロジェクトを作成する
  2. レイアウトXML(activity_maps.xml)にマップを配置する
  3. MapsActivity.ktにマップ表示処理を実装する
  4. AndroidManifest.xmlに権限とAPIキーを設定する

ステップ1:新規プロジェクトを作成する

Android Studioを起動し、「File」→「New Project」を選択して、必要な項目を入力して新しいプロジェクトを作成します。マップを扱う場合は、テンプレートで「Google Maps Views Activity」を選んでおくと、以降の手順がスムーズになります。

ステップ2:activity_maps.xmlにマップを配置する

res/layout/activity_maps.xml に以下のコードを追加します。SupportMapFragment を配置することで、画面全体にGoogleマップを表示できるようになります。

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MapsActivity" />

ステップ3:MapsActivity.ktを実装する

src/MapsActivity.kt に以下のコードを記述します。onMapReady() コールバックはマップの準備が整ったタイミングで呼び出されるため、ここでマーカーの追加やカメラ位置の移動を行います。サンプルでは現在地として緯度13.0827、経度80.2707(チェンナイ付近)を指定しています。

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.SupportMapFragment
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions

class MapsActivity : AppCompatActivity(), OnMapReadyCallback {
    private lateinit var mMap: GoogleMap

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_maps)
        // SupportMapFragmentを取得し、マップの準備ができたら通知を受け取る
        val mapFragment = supportFragmentManager
            .findFragmentById(R.id.map) as SupportMapFragment
        mapFragment.getMapAsync(this)
    }

    override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap
        val myCurrentLocation = LatLng(13.0827, 80.2707)
        mMap.addMarker(
            MarkerOptions().position(myCurrentLocation).title("ここが現在地です")
        )
        mMap.moveCamera(CameraUpdateFactory.newLatLng(myCurrentLocation))
    }
}

ステップ4:AndroidManifest.xmlに権限とAPIキーを設定する

位置情報を利用するには ACCESS_FINE_LOCATION パーミッションの宣言が必要です。さらに、Google Maps SDKを使用するため、meta-data としてAPIキーを登録します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="YOUR_API_KEY" />
    </application>
</manifest>

注意:APIキーは必ずご自身のGoogle Cloud Platform(GCP)プロジェクトで発行したものを使用してください。他人のキーやサンプルのキーをそのまま使うと動作しないほか、公開リポジトリにコミットすると不正利用される恐れもあります。

アプリを実行して動作を確認する

それではアプリを実行してみましょう。実機のAndroidスマートフォンをパソコンに接続していることを前提に説明します。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコン 【Kotlin】AndroidのLocation APIで現在地を追跡・表示する方法を徹底解説 をクリックしてください。デバイス選択画面で接続したスマートフォンを指定すると、端末にアプリがインストールされて起動し、マップ上に指定した位置へマーカーが表示された初期画面が確認できます。

【Kotlin】AndroidのLocation APIで現在地を追跡・表示する方法を徹底解説

補足:実際の現在地を追跡するには

本サンプルでは説明を簡潔にするため、固定座標を「現在地」として扱っています。実際にデバイスの現在位置を継続的に追跡したい場合は、Google Play servicesが提供する FusedLocationProviderClient を併用し、requestLocationUpdates() で位置情報の更新を定期受信するのが一般的です。また、Android 6.0(API 23)以降では ACCESS_FINE_LOCATION の実行時パーミッション要求も必須となるため、こちらも忘れずに実装しておきましょう。

  1. AndroidでClock APIクラスを使って現在のタイムゾーンを取得する方法

    Androidアプリ開発において、java.time.Clockクラスを利用すると、端末に設定されている現在のタイムゾーンを簡単に取得できます。この記事では、Clock APIクラスを使って現在のタイムゾーンを表示するサンプルアプリの作成手順を、初心者の方にもわかりやすく解説します。なお、java.timeパッケージはAndroid 8.0(APIレベル26)以降で利用可能なため、コード内ではOSバージョンのチェックを行っています。ステップ1:新規プロジェクトの作成まず、Android Studioで新しいプロジェクトを作成します。メニューバーから[File] → [New Project]を

  2. AndroidのLocation APIで現在地を追跡・表示する方法をステップごとに解説

    概要この記事では、AndroidのLocation API(Google Maps SDK)を使って、現在地を取得し地図上に表示する方法を段階的に解説します。マーカーを立てて現在地を視覚的に確認できる、シンプルなサンプルアプリを一緒に作成していきましょう。ステップ1:新規プロジェクトの作成と依存関係の追加Android Studioを起動し、メニューから「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目を入力してプロジェクトの雛形を生成してください。続いて、build.gradle(Module: app)に以下の依存関係を追加します。implemen