この Codelab について
1. 始める前に
この Codelab では、Places SDK for Android をアプリに統合し、Places SDK の各機能を使用する方法について説明します。
要件
- Kotlin と Android の開発に関する基本的な知識
学習する内容
- Kotlin 拡張機能を使って Places SDK for Android をインストールする方法
- 特定の場所の Place Details を読み込む方法
- Place Autocomplete ウィジェットをアプリに追加する方法
- デバイスで現在報告されている位置に基づいて、Current Place を読み込む方法
必要なもの
この Codelab を実行するには、次のアカウント、サービス、ツールが必要です。
- 課金が有効になっている Google アカウント
- Android Studio Bumblebee 以降
- Android Studio に Google Play 開発者サービスがインストールされていること
- Android 8 以降ベースの Google API プラットフォームを実行する Android デバイスまたは Android Emulator(インストール手順については、Android Emulator でアプリを実行するをご覧ください)
2. 準備
以下の有効化の手順では、Places API を有効にします。
Google Maps Platform を設定する
課金を有効にした Google Cloud Platform アカウントとプロジェクトをまだ作成していない場合は、Google Maps Platform スタートガイドに沿って請求先アカウントとプロジェクトを作成してください。
- Cloud Console で、プロジェクトのプルダウン メニューをクリックし、この Codelab に使用するプロジェクトを選択します。
3. クイック スタート
できるだけ早く演習を開始できるように、この Codelab で使用できるスターター コードをダウンロードできます。すぐに次のステップに進んでも問題ありませんが、ご自身で構築するためのすべての手順を確認したい場合は、最後までお読みください。
git
がインストールされている場合は、リポジトリのクローンを作成します。
git clone https://github.com/googlemaps/codelab-places-101-android.git
あるいは、このボタンをクリックしてソースコードをダウンロードします。
- コードをダウンロードしたら、Android Studio の
/starter
ディレクトリにあるプロジェクトを開きます。このプロジェクトには、この Codelab の実行に必要な基本的なファイル構造が含まれています。作業対象のすべてのコンポーネントは/starter
ディレクトリにあります。
ソリューション コード全体の動作を確認するには、/solution
ディレクトリで最終的なコードをご確認ください。
4. Places SDK for Android をインストールする
このセクションでは、アプリの依存関係に Places SDK for Android を追加します。
API キーを追加する
Places SDK for Android で API キーがアプリに関連付けられるように、先ほど作成した API キーをアプリに渡します。
- プロジェクトのルート ディレクトリ(
gradle.properties
とsettings.gradle
と同じレベル)でlocal.properties
というファイルを開きます。 - 新しい API キー
GOOGLE_MAPS_API_KEY
を定義し、作成した API キーにその値を設定します。
local.properties
GOOGLE_MAPS_API_KEY=YOUR_KEY_HERE
local.properties
は、Git リポジトリの .gitignore
ファイルに含まれています。これは、API キーが機密情報と見なされ、ソース コントロールにはできるだけチェックインしないことが推奨されるからです。
- 次に、アプリ全体で使用できるように API キーを公開するには、
app/
ディレクトリにあるアプリのbuild.gradle
ファイルに Android 用 Secrets Gradle プラグインを含め、plugins
ブロック内に以下の行を追加します。
アプリレベルの build.gradle
plugins {
// ...
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}
- プロジェクト レベルの
build.gradle
ファイルを変更して、以下のクラスパスを含めます。
プロジェクト レベルの build.gradle
buildscript {
dependencies {
// ...
classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
}
}
このプラグインを使用すると、local.properties
ファイル内で定義したキーが、ビルド時に Android マニフェスト ファイル内でビルド変数として、および Gradle で生成された BuildConfig
クラスの変数として使えるようになります。また、アプリ全体でアクセスできるように local.properties
からプロパティを読み込むために必要となるボイラープレート コードが削除されます。
Places SDK for Android の依存関係を追加する
- アプリ内で API キーにアクセスできるようになったので、Places SDK for Android の依存関係をアプリの
build.gradle
ファイルに追加します。
この Codelab に含まれるスターター プロジェクトでは、この依存関係がすでに追加されています。
アプリレベルの build.gradle
dependencies {
// Dependency to include Places SDK for Android
implementation 'com.google.android.libraries.places:places:2.6.0'
}
- アプリを実行します。
これで、アプリで空白の画面が表示されるようになります。以降の手順を実施すると、この画面には 3 つのデモが表示されます。
5. Places Android KTX をインストールする
Kotlin アプリで 1 つ以上の Google Maps Platform Android SDK を使用している場合、Kotlin 拡張機能(KTX)ライブラリを使用すると、コルーチンや、拡張プロパティまたは拡張関数などの Kotlin 言語機能を利用できます。各 Google Maps SDK には、以下に示すように、対応する KTX ライブラリがあります。
このタスクでは、Places Android KTX ライブラリを使って、アプリで Kotlin 固有の言語機能を使用します。
Places Android KTX の依存関係を追加する
Kotlin 固有の機能を活用するには、アプリレベルの build.gradle
ファイルに、この SDK に対応する KTX ライブラリを含めます。
build.gradle
dependencies {
// ...
// Places SDK for Android KTX Library
implementation 'com.google.maps.android:places-ktx:2.0.0'
}
6. プレイス クライアントを初期化する
アプリケーション スコープの Places SDK を初期化する
app/src/main/java/com/google/codelabs/maps/placesdemo
フォルダの DemoApplication.kt
ファイル内で、Places SDK for Android を初期化します。onCreate
関数の最後に以下の行を貼り付けます。
// Initialize the SDK with the Google Maps Platform API key
Places.initialize(this, BuildConfig.GOOGLE_MAPS_API_KEY)
アプリをビルドすると、Android 用 Secrets Gradle プラグインによって、local.properties
ファイル内の API キーが BuildConfig.GOOGLE_MAPS_API_KEY
として使える状態になります。
アプリケーション ファイルをマニフェストに追加する
DemoApplication
で Application
を拡張したので、マニフェストを更新する必要があります。app/src/main
にある AndroidManifest.xml
ファイルの application
要素に android:name
プロパティを追加します。
<application
android:name=".DemoApplication"
...
</application>
このコードでは、アプリ マニフェストで src/main/java/com/google/codelabs/maps/placesdemo/
フォルダ内の DemoApplication
クラスが参照されます。
7. Place Details を取得する
Details 画面を作成する
app/src/main/res/layout/
フォルダには、LinearLayout
が空の activity_details.xml
レイアウトがあります。<LinearLayout>
のかっこの間に以下のコードを追加して、線形レイアウトにデータを入力します。
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/details_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/details_input_hint"
android:text="@string/details_input_default" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/details_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/button_details" />
<TextView
android:id="@+id/details_response_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:textIsSelectable="true" />
このコードでは、ユーザーが場所 ID を入力したり、指定されたデフォルトを使用したりするテキスト入力フィールドや、Place Details リクエストを開始するボタン、レスポンスからの情報を表示する TextView が追加されます。関連付けられた文字列は、src/main/res/values/strings.xml
ファイルで定義されます。
Details アクティビティを作成する
src/main/java/com/google/codelabs/maps/placesdemo/
フォルダにDetailsActivity.kt
ファイルを作成し、先ほど作成したレイアウトに関連付けます。以下のコードをファイルに貼り付けます。
class DetailsActivity : AppCompatActivity() {
private lateinit var placesClient: PlacesClient
private lateinit var detailsButton: Button
private lateinit var detailsInput: TextInputEditText
private lateinit var responseView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_details)
// Set up view objects
detailsInput = findViewById(R.id.details_input)
detailsButton = findViewById(R.id.details_button)
responseView = findViewById(R.id.details_response_content)
}
}
- このアクティビティで使用するプレイス クライアントを作成します。
onCreate
関数のビュー オブジェクト設定の後に以下のコードを貼り付けます。
// Retrieve a PlacesClient (previously initialized - see DemoApplication)
placesClient = Places.createClient(this)
- プレイス クライアントを設定したら、クリック リスナーをボタンに追加します。
onCreate
関数のプレイス クライアント作成の後に以下のコードを貼り付けます。
// Upon button click, fetch and display the Place Details
detailsButton.setOnClickListener {
val placeId = detailsInput.text.toString()
val placeFields = listOf(
Place.Field.NAME,
Place.Field.ID,
Place.Field.LAT_LNG,
Place.Field.ADDRESS
)
lifecycleScope.launch {
try {
val response = placesClient.awaitFetchPlace(placeId, placeFields)
responseView.text = response.prettyPrint()
} catch (e: Exception) {
e.printStackTrace()
responseView.text = e.message
}
}
}
このコードでは、入力フィールドに入力された場所 ID の取得や、場所に関してリクエストするフィールドの定義、FetchPlaceRequest
の作成、タスクの開始、成功または失敗のリッスンを行います。リクエストが成功した場合、関数によって、リクエストされた詳細が TextView に入力されます。
- 拡張関数を定義して、
FetchPlaceResponse
をテキストに変換します。StringUtil.kt
ファイルを使用すると、Places SDK のレスポンスを人が読んで理解できる文字列に簡単に変換できます。
DetailsActivity.kt
ファイルの末尾に、Fetch Place レスポンス オブジェクトを文字列に変換する関数を定義します。
fun FetchPlaceResponse.prettyPrint(): String {
return StringUtil.stringify(this, false)
}
Details アクティビティをマニフェストに追加する
app/src/main
にある AndroidManifest.xml
ファイルに、DetailsActivity
の <activity>
要素を <application>
要素の子要素として追加します。
<activity android:name=".DetailsActivity" />
Details アクティビティをデモメニューに追加する
空の Demo
モジュールを使用すると、ホーム画面で利用可能なデモを一覧表示できます。Place Details アクティビティを作成したので、以下のコードを使って、それを src/main/java/com/google/codelabs/maps/placesdemo/
フォルダの Demo.kt
ファイルに追加します。
DETAILS_FRAGMENT_DEMO(
R.string.details_demo_title,
R.string.details_demo_description,
DetailsActivity::class.java
),
関連付けられた文字列は、src/main/res/values/strings.xml
ファイルで定義されます。
MainActivity.kt
を調べて、Demo
モジュールのコンテンツを反復処理して入力された ListView が作成されていることを確認します。ユーザーがリスト内の項目をタップすると、クリック リスナーによって、関連するアクティビティが開かれます。
アプリを実行する
- アプリを実行します。今回は、Place Details のデモを示すリストの項目が 1 つ表示されます。
- Place Details のテキストをタップします。作成したビューに入力フィールドとボタンが表示されます。
- [GET DETAILS] ボタンをタップします。デフォルトの場所 ID を使用した場合は、図 1 に示すように、場所の名前、住所、地図の座標が表示されます。
図 1. レスポンスが表示された Place Details アクティビティ
8. Place Autocomplete を追加する
Autocomplete 画面を作成する
app/src/main/res/layout/
フォルダには、LinearLayout
が空の activity_autocomplete.xml
レイアウトが用意されています。<LinearLayout>
のかっこの間に以下のコードを追加して、線形レイアウトにデータを入力します。
<androidx.fragment.app.FragmentContainerView
android:id="@+id/autocomplete_fragment"
android:background="@android:color/white"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/autocomplete_response_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:textIsSelectable="true" />
このコードでは、AutocompleteSupportFragment
ウィジェットと、レスポンスからの情報を表示する TextView が追加されます。関連付けられた文字列は、src/main/res/values/strings.xml
ファイルで定義されます。
Autocomplete アクティビティを作成する
src/main/java/com/google/codelabs/maps/placesdemo/
フォルダにAutocompleteActivity.kt
ファイルを作成し、以下のコードで定義します。
class AutocompleteActivity : AppCompatActivity() {
private lateinit var responseView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_autocomplete)
// Set up view objects
responseView = findViewById(R.id.autocomplete_response_content)
val autocompleteFragment =
supportFragmentManager.findFragmentById(R.id.autocomplete_fragment)
as AutocompleteSupportFragment
}
}
このコードでは、レイアウト ファイルで定義したビューと AutocompleteSupportFramgent
にアクティビティが関連付けられます。
- 次に、Place Autocomplete によって表示された候補のいずれかをユーザーが選択したときの動作を指定します。以下のコードを
onCreate
関数の末尾に追加します。
// Specify the types of place data to return.
autocompleteFragment.setPlaceFields(listOf(Place.Field.NAME, Place.Field.ID, Place.Field.LAT_LNG, Place.Field.ADDRESS))
// Listen to place selection events
lifecycleScope.launchWhenCreated {
autocompleteFragment.placeSelectionEvents().collect { event ->
when (event) {
is PlaceSelectionSuccess -> {
val place = event.place
responseView.text = StringUtil.stringifyAutocompleteWidget(place, false)
}
is PlaceSelectionError -> Toast.makeText(
this@AutocompleteActivity,
"Failed to get place '${event.status.statusMessage}'",
Toast.LENGTH_SHORT
).show()
}
}
このコードでは、場所に関してリクエストするフィールドの定義、場所の選択イベントのリッスン、成功または失敗のリッスンを行います。リクエストが成功した場合、関数によって、場所の詳細が TextView に入力されます。なお、Place Autocomplete ではプレイス オブジェクトが返されます。Place Autocomplete ウィジェットを使用する際に、個別に Place Details リクエストを行う必要はありません。
Autocomplete アクティビティをマニフェストに追加する
app/src/main
にある AndroidManifest.xml
ファイルに、AutocompleteActivity
の <activity>
要素を <application>
要素の子要素として追加します。
<activity android:name=".AutocompleteActivity" />
Autocomplete アクティビティをデモメニューに追加する
これまでと同様、Place Autocomplete のデモを Demo
モジュールのリストに追加して、ホーム画面に追加します。Place Autocomplete アクティビティを作成したので、それを src/main/java/com/google/codelabs/maps/placesdemo/
フォルダの Demo.kt
ファイルに追加します。以下のコードを DETAILS_FRAGMENT_DEMO
項目の直後に貼り付けます。
AUTOCOMPLETE_FRAGMENT_DEMO(
R.string.autocomplete_fragment_demo_title,
R.string.autocomplete_fragment_demo_description,
AutocompleteActivity::class.java
),
関連付けられた文字列は、src/main/res/values/strings.xml
ファイルで定義されます。
アプリを実行する
- アプリを実行します。今回は、ホーム画面のリストに 2 個の項目が表示されます。
- [Place Autocomplete] 行をタップします。図 2 のように、Place Autocomplete の入力ポップアップが表示されます。
- 場所の名前(施設名、住所、または地域など)を入力します。入力を開始すると、候補が表示されます。
- 候補のいずれかを選択します。図 3 に示すように、候補の表示が消え、選択された場所に関する詳細情報が TextView に表示されます。
図 2. ユーザーが入力フィールドをタップした後の Autocomplete アクティビティ
図 3. ユーザーが「Niagara Falls」と入力および選択した後で Place Details が表示された Autocomplete アクティビティ
9. デバイスの Current Place を取得する
Current Place 画面を作成する
app/src/main/res/layout/
フォルダには、LinearLayout
が空の activity_current.xml
レイアウトが用意されています。<LinearLayout>
のかっこの間に以下のコードを追加して、線形レイアウトにデータを入力します。
<Button
android:id="@+id/current_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/current_button" />
<TextView
android:id="@+id/current_response_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:scrollbars = "vertical"
android:textIsSelectable="true" />
Current Place アクティビティを作成する
src/main/java/com/google/codelabs/maps/placesdemo/
フォルダにCurrentActivity.kt
ファイルを作成し、以下のコードで定義します。
class CurrentPlaceActivity : AppCompatActivity() {
private lateinit var placesClient: PlacesClient
private lateinit var currentButton: Button
private lateinit var responseView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_current)
// Retrieve a PlacesClient (previously initialized - see DemoApplication)
placesClient = Places.createClient(this)
// Set view objects
currentButton = findViewById(R.id.current_button)
responseView = findViewById(R.id.current_response_content)
// Set listener for initiating Current Place
currentButton.setOnClickListener {
checkPermissionThenFindCurrentPlace()
}
}
}
このコードでは、レイアウト ファイルで定義したビューにアクティビティが関連付けられます。また、ボタンがクリックされたときに checkPermissionThenFindCurrentPlace
関数が呼び出されるように、ボタンにクリック リスナーが追加されます。
checkPermissionThenFindCurrentPlace()
を定義して、精度の高い位置情報の利用許可を確認し、まだ付与されていない場合はその利用許可をリクエストします。以下のコードをonCreate
関数の後に貼り付けます。
/**
* Checks that the user has granted permission for fine or coarse location.
* If granted, finds current Place.
* If not yet granted, launches the permission request.
* See https://developer.android.com/training/permissions/requesting
*/
private fun checkPermissionThenFindCurrentPlace() {
when {
(ContextCompat.checkSelfPermission(
this,
ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(
this,
ACCESS_COARSE_LOCATION
) == PackageManager.PERMISSION_GRANTED) -> {
// You can use the API that requires the permission.
findCurrentPlace()
}
shouldShowRequestPermissionRationale(ACCESS_FINE_LOCATION)
-> {
Log.d(TAG, "Showing permission rationale dialog")
// TODO: In an educational UI, explain to the user why your app requires this
// permission for a specific feature to behave as expected. In this UI,
// include a "cancel" or "no thanks" button that allows the user to
// continue using your app without granting the permission.
}
else -> {
// Ask for both the ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION permissions.
ActivityCompat.requestPermissions(
this,
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
),
PERMISSION_REQUEST_CODE
)
}
}
}
companion object {
private val TAG = "CurrentPlaceActivity"
private const val PERMISSION_REQUEST_CODE = 9
}
checkPermissionThenFindCurrentPlace
関数のelse
ブランチでrequestPermissions
が呼び出されると、アプリでは、ユーザーに対して利用許可リクエスト ダイアログが表示されます。デバイスで Android 12 より前の OS が実行されている場合、ユーザーが付与できるのは、正確な(精度の高い)位置情報の利用許可のみです。デバイスに Android 12 以降が搭載されている場合は、図 4 に示すように、正確な(精度の高い)位置情報ではなく、おおよその(精度の低い)位置情報を提供するオプションがユーザーに表示されます。
図 4. Android 12 以降を搭載したデバイスでユーザー権限をリクエストすると、正確な位置情報またはおおよその位置情報を付与するオプションが表示されます。
ユーザーがシステム権限ダイアログに応答すると、システムでは、アプリの onRequestPermissionsResult
の実装が呼び出され、利用許可ダイアログへのユーザー レスポンスと、定義したリクエスト コードが渡されます。checkPermissionThenFindCurrentPlace
の下に以下のコードを貼り付けて、onRequestPermissionResult
をオーバーライドして、この Current Place のアクティビティに関連する位置情報の利用許可のリクエスト コードを処理します。
@SuppressLint("MissingPermission")
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>, grantResults: IntArray
) {
if (requestCode != PERMISSION_REQUEST_CODE) {
super.onRequestPermissionsResult(
requestCode,
permissions,
grantResults
)
return
} else if (permissions.toList().zip(grantResults.toList())
.firstOrNull { (permission, grantResult) ->
grantResult == PackageManager.PERMISSION_GRANTED && (permission == ACCESS_FINE_LOCATION || permission == ACCESS_COARSE_LOCATION)
} != null
)
// At least one location permission has been granted, so proceed with Find Current Place
findCurrentPlace()
}
- 利用許可が付与されると、
findCurrentPlace
関数が実行されます。onRequestPermissionsResult
関数の後に、以下のコードを使って関数を定義します。
/**
* Fetches a list of [PlaceLikelihood] instances that represent the Places the user is
* most
* likely to be at currently.
*/
@RequiresPermission(anyOf = [ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION])
private fun findCurrentPlace() {
// Use fields to define the data types to return.
val placeFields: List<Place.Field> =
listOf(Place.Field.NAME, Place.Field.ID, Place.Field.ADDRESS, Place.Field.LAT_LNG)
// Use the builder to create a FindCurrentPlaceRequest.
val request: FindCurrentPlaceRequest = FindCurrentPlaceRequest.newInstance(placeFields)
// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, ACCESS_COARSE_LOCATION) ==
PackageManager.PERMISSION_GRANTED
) {
// Retrieve likely places based on the device's current location
lifecycleScope.launch {
try {
val response = placesClient.awaitFindCurrentPlace(placeFields)
responseView.text = response.prettyPrint()
// Enable scrolling on the long list of likely places
val movementMethod = ScrollingMovementMethod()
responseView.movementMethod = movementMethod
} catch (e: Exception) {
e.printStackTrace()
responseView.text = e.message
}
}
} else {
Log.d(TAG, "LOCATION permission not granted")
checkPermissionThenFindCurrentPlace()
}
}
このコードでは、可能性のある場所をリクエストするフィールドの定義、FindCurrentPlaceRequest
の作成、タスクの開始、リクエストされた詳細の TextView への入力を行います。
- 拡張関数を定義して、
FindCurrentPlaceResponse
をテキストに変換します。StringUtil.kt
ファイルを使用すると、Places SDK のレスポンスを人が読んで理解できる文字列に簡単に変換できます。
CurrentPlaceActivity.kt
ファイルの末尾に、Current Place レスポンス オブジェクトを文字列に変換する関数を定義します。
fun FindCurrentPlaceResponse.prettyPrint(): String {
return StringUtil.stringify(this, false)
}
Current Place アクティビティをマニフェストに追加する
app/src/main
にある AndroidManifest.xml
ファイルに、CurrentPlaceActivity
の <activity>
要素を <application>
要素の子要素として追加します。
<activity android:name=".CurrentPlaceActivity" />
Current Place アクティビティをデモメニューに追加する
これまでと同様、Current Place のデモを Demo
モジュールのリストに追加して、ホーム画面に追加します。Current Place アクティビティを作成したので、それを src/main/java/com/google/codelabs/maps/placesdemo/
フォルダの Demo.kt
ファイルに追加します。以下のコードを AUTOCOMPLETE_FRAGMENT_DEMO
項目の直後に貼り付けます。
CURRENT_FRAGMENT_DEMO(
R.string.current_demo_title,
R.string.current_demo_description,
CurrentPlaceActivity::class.java
),
関連付けられた文字列は、src/main/res/values/strings.xml
ファイルで定義されます。
アプリを実行する
- アプリを実行します。今回は、ホーム画面のリストに 3 個の項目が表示されます。
- [Current Place] 行をタップします。画面にボタンが表示されます。
- ボタンをタップします。これまでに位置情報の利用許可をこのアプリに付与したことがない場合は、利用許可リクエストが表示されます。
- デバイスの位置情報の利用許可をアプリに付与します。
- ボタンをもう一度タップします。今回は、図 5 に示すように、付近の場所(最大 20 か所)とその尤度のリストが表示されます。
図 5. デバイスによって報告された位置情報と一致する Current Place の候補の表示
10. 完了
Places SDK for Android を使用して Android アプリが正常に作成されました。
学習した内容
- Places SDK for Android をインストールして設定する
- Places SDK for Android 用の Kotlin 拡張機能をインストールする
- Place Details を読み込む
- Place Autocomplete を追加する
- Current Place を取得する
次のステップ
android-places-demos
GitHub リポジトリのサンプルとデモを詳しく確認またはフォークします。- Google Maps Platform で Android アプリをビルドするためのその他の Kotlin Codelab を確認します。
- 皆様のお役に立つコンテンツをご提供できるよう、以下のアンケートにご協力ください。
他にどのような Codelab をご希望ですか。
ご希望の Codelab が上記にない場合、こちらからリクエストしてください。