API Google Maps sur Wear OS

Carte sur un objet connecté

Le SDK Maps pour Android vous permet de créer une appli connectée basée sur une carte, qui s'exécute directement sur les appareils Wear OS by Google. Les utilisateurs de votre application peuvent voir leur position sur la carte d'un simple coup d'œil à leur poignet. Ils peuvent déterminer leur position sur un itinéraire, par exemple, puis effectuer un zoom avant pour afficher plus de détails, ou appuyer sur un repère pour afficher une fenêtre d'informations fournie par votre application.

Cette page décrit les fonctionnalités d'API disponibles sur un objet connecté et vous aide à créer votre application.

Premiers pas sur Wear OS

Créer une appli connectée avec le SDK Maps pour Android revient pratiquement au même que créer une appli Google Maps pour un autre appareil Android. La seule différence réside dans la conception, qui doit tenir compte du format réduit de l'objet connecté. Cela permet d'optimiser les performances et la facilité d'utilisation de l'application.

Android Studio est l'outil recommandé pour le développement sur Wear OS, car il propose des méthodes de paramétrage de projet, d'intégration de bibliothèques et de packaging.

Pour des conseils d'ordre général sur la conception d'une appli connectée, consultez les consignes de conception pour Wear OS. Pour des conseils sur la création de votre première appli connectée, consultez le guide sur la création d'appli connectées.

Créer votre première application de cartographie sur Wear OS

Ce guide rapide part du principe que vous connaissez le SDK Maps pour Android, que vous avez suivi les guides Wear OS pour créer un module connecté dans votre application, et que vous souhaitez à présent ajouter une carte à ce module.

Ajouter des dépendances à votre module Wear

Assurez-vous que les dépendances suivantes sont incluses dans le fichier build.gradle du module Wear OS de votre application :

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  compile 'com.google.android.support:wearable:1.2.0'
  provided 'com.google.android.wearable:wearable:1.0.0'
  compile 'com.google.android.gms:play-services-maps:17.0.1'
}

Pour en savoir plus sur les dépendances, consultez le guide sur la définition des mises en page dans Wear OS.

Inclure une boîte de dialogue permettant aux utilisateurs de quitter l'application

Nous vous recommandons d'utiliser une classe DismissOverlayView pour afficher la carte sur l'objet connecté. Avec la classe DismissOverlayView, vous pouvez en effet mettre en œuvre le modèle d'interface utilisateur appui long pour ignorer, qui permet aux utilisateurs de quitter l'application en effectuant un clic prolongé (ou en appuyant de manière prolongée) sur l'écran. Ce modèle est recommandé, car le SDK Maps pour Android remplace le geste standard de balayage de gauche à droite généralement utilisé pour quitter une application connectée. Dans une application Google Maps, le balayage sert à faire un panoramique sur la carte.

Ajoutez l'élément DismissOverlayView à votre définition de mise en page :

<FrameLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_height="match_parent"
   android:layout_width="match_parent">

  ...

  <android.support.wearable.view.DismissOverlayView
     android:id="@+id/dismiss_overlay"
     android:layout_height="match_parent"
     android:layout_width="match_parent"/>

</FrameLayout>

Lorsque vous obtenez l'objet DismissOverlayView dans votre activité, définissez un texte d'introduction pour informer les utilisateurs qu'ils peuvent quitter l'application par un clic prolongé, comme indiqué ci-dessous :

public class MainActivity extends WearableActivity
        implements OnMapReadyCallback, GoogleMap.OnMapLongClickListener {

    private MapFragment mMapFragment;
    private DismissOverlayView mDismissOverlay;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.basic_wear_demo);

        mDismissOverlay =
            (DismissOverlayView) findViewById(R.id.dismiss_overlay);
        mDismissOverlay.setIntroText(R.string.basic_wear_long_press_intro);
        mDismissOverlay.showIntroIfNecessary();

        mMapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mMapFragment.getMapAsync(this);
    }
    ...
}

Écoutez un geste de clic prolongé et appelez DismissOverlayView.show() pour afficher un bouton de sortie, ce qui met fin à votre activité si l'utilisateur clique dessus :

public void onMapLongClick(LatLng point) {
    mDismissOverlay.show();
}

Ajouter une carte

Utilisez la méthode de rappel onMapReady(GoogleMap) comme d'habitude pour obtenir un handle vers l'objet GoogleMap. Le rappel est déclenché dès que la carte est prête à être utilisée. Dans la méthode de rappel, vous pouvez ajouter des repères ou des polylignes à la carte, ajouter des écouteurs ou déplacer la caméra. L'exemple ci-dessous ajoute un repère près de l'opéra de Sydney :

public class MainActivity extends WearableActivity
        implements OnMapReadyCallback, GoogleMap.OnMapLongClickListener {

    private static final LatLng SYDNEY = new LatLng(-33.85704, 151.21522);
    private GoogleMap mMap;

    ...

    @Override
    public void onMapReady(GoogleMap map) {
        mMap = map;
        mMap.addMarker(new MarkerOptions().position(SYDNEY)
            .title("Sydney Opera House"));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 10));
        mMap.setOnMapLongClickListener(this);
    }
}

Activer le mode Veille

Le SDK Maps pour Android est compatible avec le mode Veille pour les applis connectées. Les applications qui prennent en charge le mode Veille sont parfois appelées applications toujours activées. Le mode Veille est activé dès que l'utilisateur n'utilise plus activement l'application et permet à l'application de rester visible sur l'objet connecté.

Le SDK Maps pour Android offre un rendu simplifié avec des couleurs atténuées de la carte pour une utilisation en mode Veille, et le style de la carte s'ajuste automatiquement dès que l'appareil passe du mode interactif au mode Veille. Tous les repères, les objets et les commandes de l'interface utilisateur disparaissent du mode Veille. Cela permet de réduire la consommation d'énergie de votre application et garantit une apparence et une utilisation cohérentes avec les autres applications utilisant ce mode, comme les cadrans de montre.

Pour que votre application utilise le mode Veille de la carte :

  1. Mettez à jour le SDK Android pour inclure la plate-forme Android 5.1 (API 22) ou une version ultérieure, qui fournit les API permettant aux activités de passer en mode Veille. Pour en savoir plus sur la mise à jour de votre SDK, consultez la documentation Android sur l'ajout de packages SDK.
  2. Assurez-vous que votre projet cible Android 5.1 ou une version ultérieure, en définissant targetSdkVersion sur 22 ou plus dans le fichier manifeste d'application.
  3. Ajoutez les dépendances connectées au fichier build.gradle de votre application. Consultez l'exemple sur cette page.
  4. Ajoutez l'entrée de bibliothèque partagée connectée au fichier manifeste d'appli connectée, comme décrit dans la formation Android sur la façon de garder votre application visible.
  5. Ajoutez l'autorisation WAKE_LOCK aux fichiers manifestes des applications mobiles et connectées, comme décrit dans la formation Android sur la façon de garder votre application visible.
  6. Créez une activité qui étend WearableActivity.
  7. Dans la méthode onCreate() de votre activité, appelez la méthode setAmbientEnabled(). Cela indique au système d'exploitation que l'application est toujours activée, de sorte que lorsque l'appareil passe en veille, il doit passer en mode Veille au lieu d'afficher le cadran de la montre.
  8. Configurez votre carte pour qu'elle prenne en charge le mode Veille. Pour cela, vous pouvez définir l'attribut map:ambientEnabled="true" dans le fichier de mise en page XML de l'activité ou le faire par programmation en définissant GoogleMapOptions.ambientEnabled(true). Ce paramètre informe l'API qu'elle doit précharger les tuiles de carte nécessaires pour l'utilisation en mode Veille.
  9. Lorsque l'activité passe en mode Veille, le système appelle la méthode onEnterAmbient() dans votre activité connectée. Ignorez onEnterAmbient() et appelez MapFragment.onEnterAmbient(ambientDetails) ou MapView.onEnterAmbient(ambientDetails). L'API passe à un rendu non interactif et peu coloré de la carte.
  10. De même, dans onExitAmbient(), appelez MapFragment.onExitAmbient() ou MapView.onExitAmbient(). L'API passe au rendu normal de la carte.

L'exemple de code suivant montre comment activer le mode Veille dans l'application et la carte :

public class MainActivity extends WearableActivity
        implements OnMapReadyCallback, GoogleMap.OnMapLongClickListener {

    private MapFragment mMapFragment;

    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);

        // Enable ambient support, so the map remains visible in a simplified,
        // low-color display when the user is no longer actively using the app
        // and the app is still visible on the watch face.
        setAmbientEnabled();

        // ... Perform other activity setup processes here too ...
    }

    /**
     * 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);
        mMapFragment.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();
        mMapFragment.onExitAmbient();
    }
}

Vous pouvez actualiser l'écran alors que l'application est en mode Veille. Pour plus de détails sur l'actualisation du contenu et sur le mode Veille en général, consultez la formation Android sur la façon de garder votre application visible.

Utiliser Street View sur Wear OS

Street View est entièrement compatible avec les objets connectés.

Pour permettre aux utilisateurs de quitter l'application lorsqu'ils consultent un panorama Street View, utilisez l'interface StreetPanorama.OnStreetPanoramaLongClickListener pour écouter un geste de clic prolongé. Dès qu'un utilisateur clique de manière prolongée à n'importe quel endroit d'une image Street View, vous recevez un événement onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation). Appelez DismissOverlayView.show() pour afficher un bouton de sortie.

Exemple de code

GitHub inclut un exemple d'application que vous pouvez utiliser comme point de départ pour créer votre application. Il montre comment configurer une carte Google basique sous Wear OS.

Fonctionnalités disponibles dans l'API Google Maps sur Wear OS

Cette section souligne les différences entre les fonctionnalités de carte prises en charge sur des objets connectés par rapport aux appareils portables (téléphones et tablettes). Toutes les fonctionnalités d'API non mentionnées ci-dessous devraient fonctionner comme indiqué pour la version complète de l'API.

Fonctionnalité
Mode interactif complet et mode simplifié

Vous pouvez utiliser le SDK Maps pour Android en mode interactif complet ou en mode simplifié. Utilisez le mode simplifié si vous souhaitez optimiser les performances de l'objet connecté et que votre application n'a pas besoin de prendre en charge d'interactions comme des gestes, un panoramique ou un zoom sur la carte.

En mode simplifié, l'intent permettant de démarrer l'application mobile Google Maps lorsque l'utilisateur appuie sur la carte est désactivé et ne peut pas être activé sur un objet connecté.

Pour obtenir la liste complète des différences entre le mode simplifié et le mode interactif complet, consultez la documentation du mode simplifié.

Barre d'outils Carte La barre d'outils Carte est désactivée et ne peut pas être activée sur un objet connecté.
Commandes de l'interface utilisateur Les commandes de l'interface utilisateur sont désactivées par défaut sur les objets connectés. Cela comprend les commandes de zoom, de boussole et le bouton Ma position. Vous pouvez les activer comme d'habitude à l'aide de la classe UiSettings.
Gestes Les gestes à toucher unique fonctionnent normalement. Par exemple, appuyer et faire glisser pour faire un panoramique sur la carte, toucher deux fois pour effectuer un zoom avant et appuyer avec deux doigts pour un zoom arrière. La prise en charge des gestes à touchers multiples varie selon l'appareil de l'utilisateur. Exemples de gestes à touchers multiples : pousser avec deux doigts pour incliner la carte, pincer pour zoomer et effectuer une rotation avec deux doigts.
Plans d'intérieur et bâtiments Les plans d'intérieur sont désactivés par défaut sur les objets connectés. Vous pouvez les activer en appelant GoogleMap.setIndoorEnabled(true). Si les plans d'intérieur sont activés, la carte affiche l'étage par défaut. L'élément d'interface Sélecteur de niveau n'est pas compatible avec les objets connectés.
Superpositions de tuiles Les superpositions de tuiles ne sont pas compatibles avec les objets connectés.

Bonnes pratiques de développement avec l'API Google Maps sur Wear OS

Comment fournir la meilleure expérience utilisateur possible dans votre application :

  • La carte doit occuper la majeure partie de l'écran. Vous devez en effet garantir la facilité d'utilisation de la carte compte tenu du format réduit de l'objet connecté.
  • Lors de la conception de l'expérience utilisateur de votre application, tenez compte du fait qu'un objet connecté dispose d'une autonomie réduite. Le fait de garder l'écran actif et la carte visible aura un impact sur les performances de la batterie.