Introducció
Google Maps és una eina poderosa que permet als desenvolupadors integrar mapes interactius a les seves aplicacions Android. Aquesta funcionalitat és útil per a una àmplia gamma d'aplicacions, des de serveis de lliurament fins a aplicacions de viatges i navegació. En aquest tema, aprendrem com integrar Google Maps en una aplicació Android, configurar les claus d'API necessàries i personalitzar el mapa segons les nostres necessitats.
Requisits Previs
Abans de començar, assegura't de tenir:
- Un compte de Google.
- Android Studio instal·lat i configurat.
- Coneixements bàsics de desenvolupament d'Android.
Passos per Integrar Google Maps
- Configuració del Projecte
1.1. Crear un Nou Projecte
- Obre Android Studio.
- Crea un nou projecte seleccionant "Empty Activity".
- Assigna un nom al projecte i selecciona el llenguatge de programació (Kotlin o Java).
1.2. Afegir les Dependències de Google Maps
Afegeix les següents dependències al fitxer build.gradle (Module: app):
dependencies {
implementation 'com.google.android.gms:play-services-maps:18.0.2'
implementation 'com.google.android.gms:play-services-location:19.0.1'
}
- Obtenir la Clau d'API de Google Maps
- Ves a la Google Cloud Console.
- Crea un nou projecte o selecciona un projecte existent.
- Activa l'API de Google Maps Platform.
- Genera una clau d'API i copia-la.
- Configurar el Fitxer
AndroidManifest.xml
AndroidManifest.xmlAfegeix els següents permisos i la clau d'API al fitxer AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_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">
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY_HERE"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
- Crear el Layout del Mapa
Crea un fitxer de disseny XML per a l'activitat principal (activity_main.xml) i afegeix un MapFragment:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
- Inicialitzar el Mapa en l'Activitat
Modifica la classe MainActivity per inicialitzar el mapa:
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 MainActivity : AppCompatActivity(), OnMapReadyCallback {
private lateinit var mMap: GoogleMap
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Obtenir el SupportMapFragment i notificar quan el mapa estigui llest per ser utilitzat.
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)
}
override fun onMapReady(googleMap: GoogleMap) {
mMap = googleMap
// Afegir un marcador a una ubicació específica i moure la càmera
val sydney = LatLng(-34.0, 151.0)
mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
}
}
- Personalitzar el Mapa
Pots personalitzar el mapa afegint diferents tipus de mapes, controls de zoom, i altres opcions. Aquí tens alguns exemples:
6.1. Canviar el Tipus de Mapa
6.2. Afegir Controls de Zoom
6.3. Afegir un Marcador Personalitzat
val customMarker = LatLng(40.7128, -74.0060)
mMap.addMarker(MarkerOptions().position(customMarker).title("Marker in New York").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)))Exercici Pràctic
Objectiu
Crea una aplicació que mostri un mapa amb la teva ubicació actual i afegeixi un marcador en una ubicació específica.
Passos
- Segueix els passos anteriors per configurar el projecte i obtenir la clau d'API.
- Afegeix els permisos necessaris per accedir a la ubicació de l'usuari.
- Utilitza la classe
FusedLocationProviderClientper obtenir la ubicació actual de l'usuari. - Afegeix un marcador a la ubicació actual de l'usuari i mou la càmera a aquesta ubicació.
Solució
import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
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 : AppCompatActivity(), OnMapReadyCallback {
private lateinit var mMap: GoogleMap
private lateinit var fusedLocationClient: FusedLocationProviderClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Obtenir el SupportMapFragment i notificar quan el mapa estigui llest per ser utilitzat.
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}
override fun onMapReady(googleMap: GoogleMap) {
mMap = googleMap
// Comprovar permisos
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), 1)
return
}
mMap.isMyLocationEnabled = true
fusedLocationClient.lastLocation.addOnSuccessListener { location ->
if (location != null) {
val currentLocation = LatLng(location.latitude, location.longitude)
mMap.addMarker(MarkerOptions().position(currentLocation).title("You are here"))
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocation, 15f))
}
}
}
}Conclusió
Integrar Google Maps en una aplicació Android és un procés relativament senzill que pot afegir una gran quantitat de funcionalitat a la teva aplicació. Amb els passos descrits anteriorment, pots començar a crear aplicacions que utilitzin mapes interactius, mostrin la ubicació de l'usuari i afegeixin marcadors personalitzats. Practica amb diferents opcions de personalització per adaptar el mapa a les necessitats específiques de la teva aplicació.
Curs d'Android Studio
Mòdul 1: Introducció a Android Studio
- Introducció a Android Studio
- Configuració d'Android Studio
- Comprensió de la Interfície d'Android Studio
- Creació del teu Primer Projecte Android
Mòdul 2: Desenvolupament Bàsic d'Android
- Comprensió de l'Estructura del Projecte Android
- Introducció als Dissenys XML
- Components Bàsics de la Interfície d'Usuari
- Introducció a les Activitats
- Executar la teva Aplicació en un Emulador
Mòdul 3: Desenvolupament Intermedi d'Android
- Introducció als Intents
- Treballar amb Fragments
- Gestió de l'Entrada de l'Usuari
- Ús de RecyclerView
- Xarxes en Android
Mòdul 4: Desenvolupament Avançat d'Android
- Persistència de Dades amb SQLite
- Ús de Room per a la Gestió de Bases de Dades
- Components Avançats de la Interfície d'Usuari
- Vistes Personalitzades i Canvas
- Treballar amb Tasques en Segon Pla
Mòdul 5: Desenvolupament Professional d'Android
- Implementació de l'Arquitectura MVVM
- Injecció de Dependències amb Dagger
- Proves Unitàries i Proves de la Interfície d'Usuari
- Publicació de la teva Aplicació a Google Play
- Optimització del Rendiment
