
Con l'SDK Maps per Android, puoi creare un'app indossabile basata su mappe che viene eseguita direttamente sui dispositivi Wear OS by Google. Gli utenti della tua app possono vedere la loro posizione sulla mappa semplicemente guardando i loro polsi. Possono tracciare la posizione su un percorso, ad esempio, aumentare lo zoom per visualizzare i dettagli o toccare un indicatore per visualizzare una finestra informativa fornita dall'app.
Questa pagina descrive le funzionalità dell'API disponibili su un dispositivo Wear e ti aiuta a iniziare a creare la tua app.
Iniziare a usare Wear OS
Creare un'app indossabile con l'SDK Maps per Android è fondamentalmente uguale a creare un'app Google Maps per qualsiasi altro dispositivo Android. La differenza sta nel design, previsto per il fattore di forma più piccolo del dispositivo indossabile, per ottimizzare l'usabilità e le prestazioni dell'app.
Android Studio è lo strumento consigliato per lo sviluppo di Wear OS, in quanto offre funzionalità di configurazione del progetto, inclusione della raccolta e pacchettizzazione.
Per assistenza generale sulla progettazione di un'app indossabile, consulta le linee guida per la progettazione di Wear OS. Per assistenza nella creazione della tua prima app indossabile, consulta la guida alla creazione di app indossabili.
Creazione della tua prima app di mappe su Wear OS
Questa guida rapida presuppone che tu abbia familiarità con l'SDK Maps per Android, di aver seguito le guide di Wear OS per creare un modulo indossabile nella tua app e di voler aggiungere una mappa al modulo indossabile.
Aggiunta di dipendenze per il modulo Wear
Assicurati che le seguenti dipendenze siano incluse nel file build.gradle
del modulo Wear OS dell'app:
dependencies { // ... compileOnly 'com.google.android.wearable:wearable:2.9.0' implementation 'com.google.android.support:wearable:2.9.0' implementation 'com.google.android.gms:play-services-maps:18.1.0' // This dependency is necessary for ambient mode implementation 'androidx.wear:wear:1.2.0' }
Per ulteriori informazioni sulle dipendenze, consulta la guida all'aggiunta di un modulo Wear OS nel progetto esistente.
Implementare un gesto di scorrimento per ignorare e impostare il colore iniziale di sfondo
Ti consigliamo di utilizzare un SwipeDismissFrameLayout
per visualizzare la mappa sul
dispositivo indossabile. Con la classe SwipeDismissFrameLayout
, puoi implementare il gesto scorri-per-dismettere che offre agli utenti un modo per uscire dall'app scorrendo dal bordo più a sinistra dello schermo.
Per impostare un colore di sfondo iniziale personalizzato, utilizza l'attributo XML map:backgroundColor
per definire il colore da visualizzare fino al caricamento effettivo dei riquadri della mappa.
Aggiungi gli elementi SwipeDismissFrameLayout
e backgroundColor
alla definizione del layout come contenitore di SupportMapFragment
:
<androidx.wear.widget.SwipeDismissFrameLayout android:id="@+id/map_container" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" map:backgroundColor="#fff0b2dd" /> </androidx.wear.widget.SwipeDismissFrameLayout>
Quando ottieni l'oggetto SwipeDismissFrameLayout
nella tua attività, aggiungi un callback e imposta il comportamento del callback per eseguire l'azione necessaria, come mostrato di seguito:
Java
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, AmbientModeSupport.AmbientCallbackProvider { public void onCreate(Bundle savedState) { super.onCreate(savedState); // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main); // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. AmbientModeSupport.AmbientController controller = AmbientModeSupport.attach(this); Log.d(MainActivity.class.getSimpleName(), "Is ambient enabled: " + controller.isAmbient()); // Retrieve the containers for the root of the layout and the map. Margins will need to be // set on them to account for the system window insets. final SwipeDismissFrameLayout mapFrameLayout = (SwipeDismissFrameLayout) findViewById( R.id.map_container); mapFrameLayout.addCallback(new SwipeDismissFrameLayout.Callback() { @Override public void onDismissed(SwipeDismissFrameLayout layout) { onBackPressed(); } }); // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // ... }
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback, AmbientModeSupport.AmbientCallbackProvider { public override fun onCreate(savedState: Bundle?) { super.onCreate(savedState) // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main) // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. val controller = AmbientModeSupport.attach(this) Log.d(MainActivity::class.java.simpleName, "Is ambient enabled: " + controller.isAmbient) // Retrieve the containers for the root of the layout and the map. Margins will need to be // set on them to account for the system window insets. val mapFrameLayout = findViewById<SwipeDismissFrameLayout>(R.id.map_container) mapFrameLayout.addCallback(object : SwipeDismissFrameLayout.Callback() { override fun onDismissed(layout: SwipeDismissFrameLayout) { onBackPressed() } }) // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this) } // ... }
Aggiungere una mappa
Utilizza il metodo di callback onMapReady(GoogleMap)
come di consueto, per ottenere un handle all'oggetto GoogleMap. Il callback viene attivato quando la mappa è pronta per essere utilizzata. Con il metodo di callback puoi aggiungere indicatori o polilinee alla mappa, aggiungere ascoltatori o spostare la videocamera. Nell'esempio riportato di seguito viene aggiunto un indicatore vicino alla Sydney Opera House:
Java
private static final LatLng SYDNEY = new LatLng(-33.85704, 151.21522); @Override public void onMapReady(@NonNull GoogleMap googleMap) { // Add a marker with a title that is shown in its info window. googleMap.addMarker(new MarkerOptions().position(SYDNEY) .title("Sydney Opera House")); // Move the camera to show the marker. googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 10)); }
Kotlin
private val sydney = LatLng(-33.85704, 151.21522) override fun onMapReady(googleMap: GoogleMap) { // Add a marker with a title that is shown in its info window. googleMap.addMarker( MarkerOptions().position(sydney) .title("Sydney Opera House") ) // Move the camera to show the marker. googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 10f)) }
Abilitazione della modalità Ambient in corso...
L'SDK Maps per Android supporta la modalità Ambient per le app indossabili. Le app che supportano la modalità Ambient sono a volte chiamate app sempre attive. La modalità Ambient viene attivata quando l'utente non sta più utilizzando attivamente l'app e consente all'utente di rimanere visibile sul dispositivo indossabile.
L'SDK Maps per Android offre una visualizzazione semplificata a colori della mappa per l'utilizzo in modalità Ambient e lo stile mappa si regola automaticamente quando il dispositivo passa dalla modalità interattiva alla modalità Ambient. Tutti gli indicatori, gli oggetti e i controlli dell'interfaccia utente scompaiono in modalità Ambient. Questo riduce il consumo energetico della tua app e assicura un aspetto coerente con altre app ambientali, come i quadranti.
Segui questi passaggi per assicurarti che la tua app utilizzi la modalità Ambient della mappa:
- Aggiorna l'SDK Android in modo che includa la piattaforma Android 6.0 (API 23) o una versione successiva, che fornisce le API che consentono l'attivazione delle attività in modalità Ambient. Per informazioni su come aggiornare l'SDK, consulta la documentazione di Android sull'aggiunta di pacchetti SDK.
- Assicurati che il tuo progetto abbia come target Android 6.0 o versioni successive, impostando
targetSdkVersion
su 23 o su un valore superiore nel file manifest dell'app. - Aggiungi le dipendenze indossabili al file
build.gradle
della tua app. Vedi l'esempio in questa pagina. - Aggiungi la voce della libreria condivisa indossabile al manifest dell'app indossabile, come descritto nella lezione di addestramento Android su Mantenere visibile la tua app.
- Aggiungi l'autorizzazione
WAKE_LOCK
ai manifest dell'app indossabile e indossabile, come descritto nella classe di addestramento Android su come mantenere l'app visibile. - Nel metodo
onCreate()
della tua attività, chiama il metodoAmbientModeSupport.attach()
. Questo comunica al sistema operativo che l'applicazione è sempre attiva, in modo che quando il dispositivo si spegne, dovrebbe entrare in modalità Ambient anziché tornare al quadrante. - Implementa l'interfaccia
AmbientModeSupport.AmbientCallbackProvider
in Attività per ricevere i cambiamenti dello stato in modalità Ambient. - Configura la mappa per supportare la modalità Ambient. Puoi farlo impostando l'attributo
map:ambientEnabled="true"
nel file di layout XML dell'attività oppure puoi farlo in modo programmatico impostandoGoogleMapOptions.ambientEnabled(true)
. Questa impostazione indica all'API che deve precaricare i riquadri della mappa necessari per l'utilizzo in modalità Ambient. - Quando l'attività passa alla modalità Ambient, il sistema chiama il metodo
onEnterAmbient()
inAmbientCallback
da te fornito. Esegui l'override dionEnterAmbient()
e chiamaSupportMapFragment.onEnterAmbient(ambientDetails)
oMapView.onEnterAmbient(ambientDetails)
. L'API passa a un rendering non interattivo e a colori della mappa. - Analogamente, in
onExitAmbient()
chiamaSupportMapFragment.onExitAmbient()
oMapView.onExitAmbient()
. L'API passa alla visualizzazione normale della mappa.
Il seguente esempio di codice abilita la modalità Ambient nell'attività:
Java
public class AmbientActivity extends AppCompatActivity implements AmbientModeSupport.AmbientCallbackProvider { private SupportMapFragment mapFragment; public void onCreate(Bundle savedState) { super.onCreate(savedState); // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main); // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. AmbientModeSupport.AmbientController controller = AmbientModeSupport.attach(this); Log.d(AmbientActivity.class.getSimpleName(), "Is ambient enabled: " + controller.isAmbient()); // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); } @Override public AmbientCallback getAmbientCallback() { return new AmbientCallback() { /** * Starts ambient mode on the map. * The API swaps to a non-interactive and low-color rendering of the map when the user is no * longer actively using the app. */ @Override public void onEnterAmbient(Bundle ambientDetails) { super.onEnterAmbient(ambientDetails); mapFragment.onEnterAmbient(ambientDetails); } /** * Exits ambient mode on the map. * The API swaps to the normal rendering of the map when the user starts actively using the app. */ @Override public void onExitAmbient() { super.onExitAmbient(); mapFragment.onExitAmbient(); } }; } }
Kotlin
class AmbientActivity : AppCompatActivity(), AmbientModeSupport.AmbientCallbackProvider { private lateinit var mapFragment: SupportMapFragment public override fun onCreate(savedState: Bundle?) { super.onCreate(savedState) // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main) // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. val controller = AmbientModeSupport.attach(this) Log.d(AmbientActivity::class.java.simpleName, "Is ambient enabled: " + controller.isAmbient) // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment } override fun getAmbientCallback(): AmbientModeSupport.AmbientCallback { return object : AmbientModeSupport.AmbientCallback() { /** * Starts ambient mode on the map. * The API swaps to a non-interactive and low-color rendering of the map when the user is no * longer actively using the app. */ override fun onEnterAmbient(ambientDetails: Bundle) { super.onEnterAmbient(ambientDetails) mapFragment.onEnterAmbient(ambientDetails) } /** * Exits ambient mode on the map. * The API swaps to the normal rendering of the map when the user starts actively using the app. */ override fun onExitAmbient() { super.onExitAmbient() mapFragment.onExitAmbient() } } } }
Puoi aggiornare lo schermo quando l'app è in modalità Ambient. Per maggiori dettagli sull'aggiornamento dei contenuti e sulla modalità Ambient in generale, consulta il corso di formazione Android su come mantenere visibile l'app.
Utilizzare Street View su Wear OS
Street View è completamente supportato sui dispositivi indossabili.
Per consentire agli utenti di uscire dall'app quando visualizzano un panorama di Street View, utilizza l'interfaccia StreetViewPanorama.OnStreetViewPanoramaLongClick listener
per ascoltare un gesto di clic lungo. Quando un utente fa clic a lungo sull'immagine di Street View, riceverai un evento onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation)
. Chiama
DismissOverlayView.show()
per visualizzare un pulsante di uscita.
Codice di esempio
Su GitHub è disponibile un'app di esempio che puoi utilizzare come punto di partenza per l'app. L'esempio ti mostra come configurare una mappa Google di base su Wear OS.
Funzionalità supportate nell'API di Maps su Wear OS
Questa sezione descrive le differenze nelle funzionalità supportate per le mappe sui dispositivi indossabili rispetto ai dispositivi portatili (telefoni e tablet). Tutte le funzionalità API non indicate di seguito dovrebbero funzionare come documentato per l'API completa.
Funzionalità | |
---|---|
Modalità completamente interattiva e modalità Lite | Puoi utilizzare l'SDK Maps per Android in modalità completamente interattiva o in modalità Lite. Valuta la modalità lite se vuoi ottimizzare le prestazioni sul dispositivo indossabile e la tua app non deve supportare interazioni come i gesti o la panoramica e lo zoom della mappa. In modalità lite, l'intenzione di avviare l'app per dispositivi mobili Google Maps quando l'utente tocca la mappa è disattivata e non può essere attivata su un dispositivo indossabile. Per un elenco completo delle differenze tra la modalità Lite e la modalità completamente interattiva, consulta la documentazione relativa alla modalità Lite. |
Barra degli strumenti della mappa | La barra degli strumenti della mappa è disattivata e non può essere attivata su un dispositivo indossabile. |
Controlli UI | I controlli UI sono disattivati per impostazione predefinita sui dispositivi indossabili. Sono inclusi i controlli per lo zoom, la bussola e la mia posizione. Puoi abilitarli utilizzando la classe
UiSettings
come di consueto.
|
Gesti | I gesti single-touch funzionano come previsto. Esempi: tocca e trascina per eseguire la panoramica della mappa, tocca due volte per aumentare lo zoom e tocca con due dita per diminuire lo zoom. Il supporto varia in base ai gesti multi-touch a seconda del dispositivo dell'utente. Esempi di gesti multi-touch includono la pressione con due dita per inclinare la mappa, pizzica per eseguire lo zoom e la rotazione con due dita. |
Mappe ed edifici per interni |
Le mappe interne sono disattivate per impostazione predefinita su un dispositivo indossabile. Puoi abilitarli chiamando
GoogleMap.setIndoorEnabled(true) . Se le mappe di interni sono
abilitate, la mappa mostrerà il livello minimo predefinito.
L'elemento UI del selettore di livello non è supportato sui dispositivi indossabili. |
Overlay riquadro | Gli overlay di piastrelle non sono supportati sui dispositivi indossabili. |
Best practice per lo sviluppo con l'API di Google Maps su Wear OS
Come offrire la migliore esperienza utente nella tua app:
- La mappa dovrebbe occupare gran parte dello schermo. Questo è necessario per ottimizzare l'usabilità della mappa sul fattore di forma ridotto di un dispositivo indossabile.
- Quando progetti l'esperienza utente della tua app, tieni presente che la batteria di un dispositivo indossabile è quasi esaurita. Mantenere lo schermo attivo e la mappa visibile ha impatto sulle prestazioni della batteria.