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

KotlinでAndroidのGoogleマップに現在地を表示する方法【サンプルコード付き】

はじめに

この記事では、Kotlinを使用してAndroidアプリのGoogleマップ上に現在地を表示する方法を、サンプルコード付きで詳しく解説します。

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

Android Studioで新しいプロジェクトを作成します。メニューから「File → New Project」を選択し、必要な情報を入力してプロジェクトを作成してください。

ステップ2:レイアウトファイルを編集する

res/layout/activity_main.xmlに以下のコードを追加します。

<fragment xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:id="@+id/myMap"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" />

ステップ3:依存関係を追加する

build.gradle(Module: app)に以下の依存関係を追加します。Googleマップと位置情報サービスを利用するために必要です。

implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'

ステップ4:MainActivity.ktにコードを追加する

src/MainActivity.ktに以下のコードを追加します。位置情報パーミッションの確認から現在地の取得、マップへのマーカー表示までを一括して実装しています。

import android.Manifest
import android.content.pm.PackageManager
import android.location.Location
import android.os.Bundle
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.fragment.app.FragmentActivity
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
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 MainActivity : FragmentActivity(), OnMapReadyCallback {
    private lateinit var currentLocation: Location
    private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
    private val permissionCode = 101

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this@MainActivity)
        fetchLocation()
    }

    private fun fetchLocation() {
        if (ActivityCompat.checkSelfPermission(
                this, Manifest.permission.ACCESS_FINE_LOCATION) !=
            PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                this, Manifest.permission.ACCESS_COARSE_LOCATION) !=
            PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), permissionCode)
            return
        }
        val task = fusedLocationProviderClient.lastLocation
        task.addOnSuccessListener { location ->
            if (location != null) {
                currentLocation = location
                Toast.makeText(applicationContext, currentLocation.latitude.toString() + "" +
                    currentLocation.longitude, Toast.LENGTH_SHORT).show()
                val supportMapFragment = (supportFragmentManager.findFragmentById(R.id.myMap) as
                    SupportMapFragment?)!!
                supportMapFragment.getMapAsync(this@MainActivity)
            }
        }
    }

    override fun onMapReady(googleMap: GoogleMap?) {
        val latLng = LatLng(currentLocation.latitude, currentLocation.longitude)
        val markerOptions = MarkerOptions().position(latLng).title("I am here!")
        googleMap?.animateCamera(CameraUpdateFactory.newLatLng(latLng))
        googleMap?.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 5f))
        googleMap?.addMarker(markerOptions)
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String?>,
        grantResults: IntArray) {
        when (requestCode) {
            permissionCode -> if (grantResults.isNotEmpty() && grantResults[0] ==
                PackageManager.PERMISSION_GRANTED) {
                fetchLocation()
            }
        }
    }
}

ステップ5:Google Maps APIキーを取得する

Googleマップを表示するにはAPIキー(map_key)が必要です。以下の手順に従って取得してください。

  • Google Cloud Platform Consoleにアクセスします。
  • プロジェクトのドロップダウンをクリックし、APIキーを追加するプロジェクトを選択または新規作成します。
  • メニューボタンKotlinでAndroidのGoogleマップに現在地を表示する方法【サンプルコード付き】をクリックし、「APIとサービス」→「認証情報」を選択します。
  • 認証情報ページで「認証情報を作成」→「APIキー」をクリックします。ダイアログに新しく作成されたAPIキーが表示されます。
  • 「閉じる」をクリックします。
  • 新しいAPIキーは、認証情報ページの「APIキー」セクションに一覧表示されます(本番環境で使用する前に、必ずAPIキーに制限を設定してください)。
  • ステップ6で示すとおり、マニフェストファイルの<meta-data>タグ内にAPIキーを追加します。

ステップ6:AndroidManifest.xmlを編集する

androidManifest.xmlに以下のコードを追加します。位置情報パーミッションの宣言と、APIキーの設定を忘れずに行いましょう。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q15">
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <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>

アプリを実行する

それでは、アプリケーションを実行してみましょう。ここでは、Androidの実機をパソコンに接続しているものとします。Android Studioからアプリを実行するには、プロジェクト内のアクティビティファイルを開き、ツールバーの実行アイコンKotlinでAndroidのGoogleマップに現在地を表示する方法【サンプルコード付き】をクリックします。接続したモバイルデバイスを選択すると、実機の画面にGoogleマップと現在地を示すマーカーが表示されます。

KotlinでAndroidのGoogleマップに現在地を表示する方法【サンプルコード付き】

  1. 【Android】現在地の緯度・経度を取得する方法をサンプルコード付きで解説

    この記事では、Androidアプリで現在地の緯度(latitude)と経度(longitude)を取得する方法を、実際に動作するサンプルコードとともにわかりやすく解説します。位置情報の取得には LocationManager クラスを使用します。GPSがオフの場合に設定画面へ誘導するダイアログの表示や、実行時パーミッションのリクエスト処理もあわせて実装していきます。ステップ1:Android Studioで新規プロジェクトを作成するAndroid Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成してください。

  2. 【初心者向け】HTML5ジオロケーションとGoogleマップで現在地を表示する方法

    HTML5のGeolocation API(ジオロケーションAPI)を使うと、Webサイトと位置情報を共有できるようになります。JavaScriptでデバイスの緯度・経度を取得し、そのデータをバックエンドのWebサーバーへ送信することで、周辺店舗の検索や地図上への現在地表示など、位置情報を活用したさまざまな機能を実装できます。ジオロケーションの座標は、デバイスの地理的な位置を正確に特定するための情報です。 getCurrentPosition()メソッドの仕組み Geolocation APIでは、getCurrentPosition()などのメソッドに対して、位置情報を取得するためのコールバ