À propos de cet atelier de programmation
1. Avant de commencer
Cet atelier de programmation vous explique comment intégrer le SDK Places pour Android à votre application et en utiliser chacune des fonctionnalités.
Conditions préalables
- Connaissances de base en développement avec Kotlin et Android
Points abordés
- Installer le SDK Places pour Android avec des extensions Kotlin
- Charger Places Details pour un lieu spécifique
- Ajouter un widget Place Autocomplete à l'application
- Charger l'emplacement actuel en fonction de la position indiquée par l'appareil
Prérequis
Pour suivre cet atelier de programmation, vous aurez besoin des comptes, des services et des outils suivants :
- Un compte Google pour lequel la facturation est activée
- Android Studio Bumblebee ou version ultérieure
- Les services Google Play installés dans Android Studio
- Un appareil ou un émulateur Android qui exécute la plate-forme des API Google sous Android version 8 ou ultérieure (pour connaître la procédure d'installation, consultez Exécuter des applications sur l'émulateur Android).
2. Configuration
Pour réaliser l'étape ci-dessous, activez l'API Places.
Configurer Google Maps Platform
Si vous ne disposez pas encore d'un compte Google Cloud Platform et d'un projet pour lequel la facturation est activée, consultez le guide Premiers pas avec Google Maps Platform pour savoir comment créer un compte de facturation et un projet.
- Dans Cloud Console, cliquez sur le menu déroulant des projets, puis sélectionnez celui que vous souhaitez utiliser pour cet atelier de programmation.
- Activez les API et les SDK Google Maps Platform requis pour cet atelier de programmation dans Google Cloud Marketplace. Pour ce faire, suivez les étapes indiquées dans cette vidéo ou dans cette documentation.
- Générez une clé API sur la page Identifiants de Cloud Console. Vous pouvez suivre la procédure décrite dans cette vidéo ou dans cette documentation. Toutes les requêtes envoyées à Google Maps Platform nécessitent une clé API.
3. Démarrage rapide
Voici un code de démarrage qui vous permettra de commencer rapidement cet atelier de programmation. Vous pouvez tout à fait passer directement au résultat, mais si vous souhaitez voir toutes les étapes et les réaliser de votre côté, poursuivez votre lecture.
- Clonez le dépôt si vous avez installé
git
.
git clone https://github.com/googlemaps/codelab-places-101-android.git
Vous pouvez également cliquer sur le bouton ci-dessous pour télécharger le code source.
- Après avoir téléchargé le code, ouvrez le projet qui se trouve dans le répertoire
/starter
dans Android Studio. Ce projet inclut la structure de fichier de base dont vous avez besoin pour l'atelier de programmation. Tous les éléments avec lesquels vous devez travailler se trouvent dans le répertoire/starter
.
Si vous souhaitez exécuter le code complet de la solution, vous pouvez consulter le code terminé dans le répertoire /solution
.
4. Installer le SDK Places pour Android
Dans cette section, vous allez ajouter le SDK Places pour Android aux dépendances de votre application.
Ajouter votre clé API
Fournissez la clé API créée précédemment à l'application afin que le SDK Places pour Android puisse la lui associer.
- Ouvrez le fichier nommé
local.properties
dans le répertoire racine de votre projet (au même niveau quegradle.properties
etsettings.gradle
). - Paramétrez une nouvelle clé
GOOGLE_MAPS_API_KEY
en définissant sa valeur sur la clé API créée.
local.properties
GOOGLE_MAPS_API_KEY=YOUR_KEY_HERE
Notez que local.properties
est répertorié dans le fichier .gitignore
du dépôt Git. En effet, votre clé API est considérée comme une information sensible et ne doit pas être vérifiée dans un contrôle du code source, si possible.
- Pour exposer ensuite votre clé API afin de l'utiliser dans l'ensemble de votre application, incluez le plug-in Secrets Gradle pour Android dans le fichier
build.gradle
de votre application (situé dans le répertoireapp/
) et ajoutez la ligne suivante dans le blocplugins
:
build.gradle au niveau de l'application
plugins {
// ...
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}
- Modifiez votre fichier
build.gradle
au niveau du projet pour inclure le chemin de classe suivant :
build.gradle au niveau du projet
buildscript {
dependencies {
// ...
classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
}
}
Avec ce plug-in, les clés que vous avez définies dans votre fichier local.properties
sont disponibles en tant que variantes de compilation dans le fichier manifeste Android et en tant que variables dans la classe BuildConfig
générée par Gradle au moment de la compilation. Ainsi, vous n'avez plus besoin du code récurrent permettant de lire les propriétés de local.properties
afin d'étendre l'accès à l'ensemble de l'application.
Ajouter la dépendance du SDK Places pour Android
- Maintenant que l'application a accès à votre clé API, ajoutez la dépendance du SDK Maps pour Android dans le fichier
build.gradle
de votre application.
Dans le projet initial proposé dans cet atelier de programmation, cette dépendance a déjà été ajoutée.
build.gradle au niveau de l'application
dependencies {
// Dependency to include Places SDK for Android
implementation 'com.google.android.libraries.places:places:2.6.0'
}
- Exécutez l'application.
Vous devriez maintenant voir une application avec un écran vide. Renseignez trois démos dans cet écran.
5. Installer Places Android KTX
Pour les applications Kotlin qui utilisent un ou plusieurs SDK Google Maps Platform Android, les bibliothèques d'extensions Kotlin (KTX) vous permettent de bénéficier des fonctionnalités du langage Kotlin, comme les coroutines, les propriétés et fonctions d'extension, etc. Chaque SDK Google Maps possède une bibliothèque KTX correspondante, comme indiqué ci-dessous :
Dans cette tâche, vous allez utiliser la bibliothèque Places Android KTX pour utiliser les fonctionnalités de langage spécifiques à Kotlin dans votre application.
Ajouter la dépendance Places Android KTX
Pour profiter des fonctionnalités spécifiques à Kotlin, incluez la bibliothèque KTX correspondante pour ce SDK à votre fichier build.gradle
au niveau de l'application.
build.gradle
dependencies {
// ...
// Places SDK for Android KTX Library
implementation 'com.google.maps.android:places-ktx:2.0.0'
}
6. Initialiser le client Places
Initialiser le SDK Places pour la portée de l'application
Dans le fichier DemoApplication.kt
du dossier app/src/main/java/com/google/codelabs/maps/placesdemo
, initialisez le SDK Places pour Android. Collez les lignes ci-dessous à la fin de la fonction onCreate
:
// Initialize the SDK with the Google Maps Platform API key
Places.initialize(this, BuildConfig.GOOGLE_MAPS_API_KEY)
Lorsque vous compilez l'application, le plug-in Secrets Gradle pour Android rend la clé API du fichier local.properties
disponible en tant que BuildConfig.GOOGLE_MAPS_API_KEY
.
Ajouter le fichier d'application au fichier manifeste
Étant donnée que vous avez étendu Application
avec DemoApplication
, vous devez modifier le fichier manifeste. Ajoutez la propriété android:name
à l'élément application
du fichier AndroidManifest.xml
, situé dans app/src/main
:
<application
android:name=".DemoApplication"
...
</application>
Ce code pointe le fichier manifeste de l'application vers la classe DemoApplication
du dossier src/main/java/com/google/codelabs/maps/placesdemo/
.
7. Extraire Place Details
Créer un écran "Détails"
Une mise en page activity_details.xml
avec un LinearLayout
vide est disponible dans le dossier app/src/main/res/layout/
. Ajoutez à la mise en page linéaire le code suivant entre les crochets <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" />
Ce code ajoute un champ de saisie de texte dans lequel l'utilisateur peut saisir n'importe quel ID de lieu ou utiliser la valeur par défaut fournie, un bouton pour lancer la requête Places Details et un TextView pour afficher les informations de la réponse. Les chaînes associées sont définies pour vous dans le fichier src/main/res/values/strings.xml
.
Créer une activité Details
- Créez un fichier
DetailsActivity.kt
dans le dossiersrc/main/java/com/google/codelabs/maps/placesdemo/
et associez-le à la mise en page que vous venez de créer. Collez le code suivant dans le fichier :
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)
}
}
- Créez un client Places à utiliser avec cette activité. Collez le code suivant après la configuration de l'objet de vue dans la fonction
onCreate
.
// Retrieve a PlacesClient (previously initialized - see DemoApplication)
placesClient = Places.createClient(this)
- Une fois le client Places configuré, associez un écouteur de clics au bouton. Collez le code suivant après la création du client Places dans la fonction
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
}
}
}
Ce code récupère l'ID de lieu renseigné dans le champ de saisie, définit les champs à demander pour le lieu, crée un FetchPlaceRequest
, lance la tâche et l'écoute pour savoir si elle aboutit ou non. Si la requête aboutit, la fonction renseigne les informations demandées dans TextView.
- Convertissez
FetchPlaceResponse
en texte en définissant une fonction d'extension. Un fichierStringUtil.kt
est fourni pour simplifier la conversion des réponses du SDK Places en chaînes lisibles.
À la fin du fichier DetailsActivity.kt
, définissez une fonction pour convertir l'objet de réponse Fetch Place en chaîne.
fun FetchPlaceResponse.prettyPrint(): String {
return StringUtil.stringify(this, false)
}
Ajouter l'activité Détails au fichier manifeste
Ajoutez un élément <activity>
pour DetailsActivity
en tant qu'enfant de l'élément <application>
dans le fichier AndroidManifest.xml
, situé dans app/src/main
:
<activity android:name=".DetailsActivity" />
Ajouter l'activité Détails dans le menu de démonstration
Un module Demo
vide est fourni pour lister les versions de démonstration disponibles sur l'écran d'accueil. Maintenant que vous avez créé une activité Place Details, ajoutez-la au fichier Demo.kt
du dossier src/main/java/com/google/codelabs/maps/placesdemo/
avec le code suivant :
DETAILS_FRAGMENT_DEMO(
R.string.details_demo_title,
R.string.details_demo_description,
DetailsActivity::class.java
),
Les chaînes associées sont définies dans le fichier src/main/res/values/strings.xml
.
Inspectez MainActivity.kt
: vous remarquerez qu'il crée une ListView qui est renseignée par itération des contenus du module Demo
. Si l'utilisateur appuie sur un élément de la liste, l'écouteur de clics ouvre l'activité associée.
Exécuter l'application
- Exécutez l'application. Cette fois, un élément de la liste doit présenter la démonstration Place Details.
- Appuyez sur le texte Place Details. Vous devriez voir la vue créée ainsi qu'un champ de saisie et un bouton.
- Appuyez sur le bouton "OBTENIR DES INFORMATIONS". Si vous avez utilisé l'identifiant de lieu par défaut, vous devriez voir le nom du lieu, son adresse et ses coordonnées sur la carte, comme illustré dans la Figure 1.
Figure 1. Activité Place Details avec réponse affichée.
8. Ajouter Place Autocomplete
Créer un écran de saisie semi-automatique
Une mise en page activity_autocomplete.xml
avec un LinearLayout
vide est fournie dans le dossier app/src/main/res/layout/
. Ajoutez à la mise en page linéaire le code suivant entre les crochets <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" />
Ce code ajoute un widget AutocompleteSupportFragment
et un TextView pour afficher les informations de la réponse. Les chaînes associées sont définies dans le fichier src/main/res/values/strings.xml
.
Créer une activité de saisie semi-automatique
- Créez un fichier
AutocompleteActivity.kt
dans le dossiersrc/main/java/com/google/codelabs/maps/placesdemo/
et définissez-le à l'aide du code suivant :
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
}
}
Ce code associe l'activité aux vues et à AutocompleteSupportFramgent
, que vous avez défini dans le fichier de mise en page.
- Ensuite, définissez l'action à effectuer lorsque l'utilisateur sélectionne l'une des prédictions suggérées par Place Autocomplete. Ajoutez le code suivant à la fin de la fonction
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()
}
}
Ce code définit les champs à demander pour le lieu, et écoute pour détecter des événements de sélection de lieu ainsi que pour savoir s'ils aboutissent ou non. Si la requête aboutit, la fonction renseigne les informations sur le lieu dans TextView. Notez que Place Autocomplete renvoie un objet Place. Il n'est pas nécessaire d'envoyer une requête Places Details distincte lorsque vous utilisez le widget Place Autocomplete.
Ajouter l'activité de saisie semi-automatique au fichier manifeste
Ajoutez un élément <activity>
pour AutocompleteActivity
en tant qu'enfant de l'élément <application>
dans le fichier AndroidManifest.xml
, situé dans app/src/main
:
<activity android:name=".AutocompleteActivity" />
Ajouter l'activité de saisie semi-automatique dans le menu de démonstration
Comme précédemment, ajoutez la démonstration de Place Autocomplete à l'écran d'accueil en l'ajoutant à la liste du module Demo
. Maintenant que vous avez créé une activité Place Autocomplete, ajoutez-la au fichier Demo.kt
du dossier src/main/java/com/google/codelabs/maps/placesdemo/
. Collez le code suivant juste après l'élément DETAILS_FRAGMENT_DEMO
:
AUTOCOMPLETE_FRAGMENT_DEMO(
R.string.autocomplete_fragment_demo_title,
R.string.autocomplete_fragment_demo_description,
AutocompleteActivity::class.java
),
Les chaînes associées sont définies dans le fichier src/main/res/values/strings.xml
.
Exécuter l'application
- Exécutez l'application : deux éléments devraient s'afficher dans la liste de l'écran d'accueil.
- Appuyez sur la ligne Place Autocomplete. Vous devriez voir un pop-up de saisie Place Autocomplete comme illustré dans la Figure 2.
- Commencez à saisir le nom d'un lieu. Il peut s'agir du nom d'un établissement, d'une adresse ou d'une région. Les prédictions doivent s'afficher à mesure que vous saisissez du texte.
- Sélectionnez l'une des prédictions. Les prédictions devraient disparaître, et TextView devrait afficher les détails du lieu sélectionné, comme illustré dans la Figure 3.
Figure 2. Activité de saisie semi-automatique une fois que l'utilisateur appuie sur le champ de saisie.
Figure 3. Activité de saisie semi-automatique une fois que l'utilisateur a saisi et sélectionné "Chutes du Niagara".
9. Obtenir l'emplacement actuel de l'appareil
Créer un écran "Emplacement actuel"
Une mise en page activity_current.xml
avec un LinearLayout
vide est fournie dans le dossier app/src/main/res/layout/
. Ajoutez à la mise en page linéaire le code suivant entre les crochets <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" />
Créer une activité d'emplacement actuel
- Créez un fichier
CurrentActivity.kt
dans le dossiersrc/main/java/com/google/codelabs/maps/placesdemo/
et définissez-le à l'aide du code suivant :
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()
}
}
}
Ce code associe l'activité aux vues que vous avez définies dans le fichier de mise en page. Un écouteur de clics est également ajouté au bouton pour appeler la fonction checkPermissionThenFindCurrentPlace
lorsque l'utilisateur clique dessus.
- Définissez l'élément
checkPermissionThenFindCurrentPlace()
pour vérifier l'autorisation d'accéder à la position précise et la demander si elle n'a pas encore été accordée. Collez le code suivant après la fonctiononCreate
.
/**
* 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
}
- Lorsque la branche
else
de la fonctioncheckPermissionThenFindCurrentPlace
appellerequestPermissions
, l'application affiche une boîte de dialogue pour demander l'autorisation à l'utilisateur. S'il exécute un appareil avec un système d'exploitation antérieur à Android 12, il peut uniquement accorder une autorisation de géolocalisation précise. Si l'utilisateur utilise un appareil exécutant Android 12 ou version ultérieure, il aura la possibilité d'indiquer sa position approximative plutôt que sa position précise, comme illustré dans la Figure 4.
Figure 4. Demander l'autorisation de l'utilisateur sur un appareil exécutant Android 12 ou version ultérieure permet d'en obtenir la position précise ou approximative.
Une fois que l'utilisateur a répondu à la boîte de dialogue d'autorisations du système, celui-ci appelle l'intégration de onRequestPermissionsResult
dans votre application. Le système transmet la réponse de l'utilisateur à la boîte de dialogue d'autorisation, ainsi que le code de demande que vous avez défini. Ignorez onRequestPermissionResult
pour gérer le code de demande d'autorisation d'accéder à la position associées à cette activité de l'emplacement actuel en collant le code suivant sous checkPermissionThenFindCurrentPlace
.
@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()
}
- Une fois cette autorisation accordée, la fonction
findCurrentPlace
s'exécute. Définissez la fonction avec le code suivant après la fonctiononRequestPermissionsResult
.
/**
* 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()
}
}
Ce code définit les champs à demander pour les lieux probables, crée un FindCurrentPlaceRequest
, lance la tâche et renseigne le TextView avec les informations requises.
- Convertissez
FindCurrentPlaceResponse
en texte en définissant une fonction d'extension. Un fichierStringUtil.kt
est fourni pour simplifier la conversion des réponses du SDK Places en chaînes lisibles.
À la fin du fichier CurrentPlaceActivity.kt
, définissez une fonction pour convertir l'objet de réponse Current Place en chaîne.
fun FindCurrentPlaceResponse.prettyPrint(): String {
return StringUtil.stringify(this, false)
}
Ajouter l'activité de l'emplacement actuel au fichier manifeste
Ajoutez un élément <activity>
pour CurrentPlaceActivity
en tant qu'enfant de l'élément <application>
dans le fichier AndroidManifest.xml
, situé dans app/src/main
:
<activity android:name=".CurrentPlaceActivity" />
Ajouter l'activité de l'emplacement actuel au menu de démonstration
Comme précédemment, ajoutez la démonstration de Current Place à l'écran d'accueil en l'ajoutant à la liste du module Demo
. Maintenant que vous avez créé une activité de l'emplacement actuel, ajoutez-la au fichier Demo.kt
dans le dossier src/main/java/com/google/codelabs/maps/placesdemo/
. Collez le code suivant juste après l'élément AUTOCOMPLETE_FRAGMENT_DEMO
:
CURRENT_FRAGMENT_DEMO(
R.string.current_demo_title,
R.string.current_demo_description,
CurrentPlaceActivity::class.java
),
Les chaînes associées sont définies dans le fichier src/main/res/values/strings.xml
.
Exécuter l'application
- Exécutez l'application : trois éléments devraient s'afficher dans la liste de l'écran d'accueil.
- Appuyez sur la ligne "Emplacement actuel". Un bouton devrait apparaître à l'écran.
- Appuyez sur le bouton. Si vous n'avez pas encore autorisé l'application à accéder à votre position, une demande d'autorisation devrait s'afficher.
- Autorisez l'application à accéder à la position de l'appareil.
- Appuyez à nouveau sur le bouton. Cette fois, une liste contenant jusqu'à 20 lieux à proximité et leurs probabilités devrait s'afficher, comme illustré dans la Figure 5.
Figure 5. Présentation des correspondances probables de l'emplacement actuel pour la position indiquée par l'appareil.
10. Félicitations
Vous avez créé une application Android à l'aide du SDK Places pour Android.
Ce que vous avez appris
- Installer et configurer le SDK Places pour Android
- Installer des extensions Kotlin pour le SDK Places pour Android
- Charger des détails sur un lieu
- Ajouter Place Autocomplete
- Obtenir l'emplacement actuel
Étapes suivantes
- Explorez ou dupliquez le dépôt d'échantillons et de démonstrations
android-places-demos
pour trouver l'inspiration. - Découvrez d'autres ateliers de programmation Kotlin pour créer des applications Android avec Google Maps Platform.
- Aidez-nous à créer le contenu qui vous semble le plus utile en répondant à la question suivante :
Quels autres ateliers de programmation souhaiteriez-vous voir ?
L'atelier de programmation que vous souhaitez suivre ne figure pas dans la liste ? Demandez-le en décrivant un nouveau problème ici.