在 Wear OS 上使用 Maps API

穿戴式裝置上的地圖

您可以使用 Maps SDK for Android,建立能直接在 Wear OS by Google 裝置上執行的地圖式穿戴式應用程式。應用程式使用者只要看一下手腕上的裝置,就能在地圖上查看目前的所在位置。舉例來說,使用者可以在路徑上定位,然後放大地圖查看詳細資料,或輕觸標記來查看應用程式提供的資訊視窗。

本頁面說明 Wear 裝置提供的 API 功能,並協助您開始建構應用程式。

開始使用 Wear OS

使用 Maps SDK for Android 建構穿戴式應用程式的做法,基本上和為其他 Android 裝置建構 Google 地圖應用程式沒有太大差異。主要差別在於設計需配合穿戴式裝置較小的板型規格,以提高應用程式的可用性和效能。

建議您使用 Android Studio 開發 Wear OS,因為這項工具提供專案設定、程式庫收錄和封裝等便利功能。

如需與設計穿戴式應用程式相關的一般說明,請參閱 Wear OS 設計指南。如需建立第一個穿戴式應用程式的相關說明,請參閱建立穿戴式應用程式指南。

在 Wear OS 上建構您的第一個地圖應用程式

本快速指南假設您已熟悉如何使用 Maps SDK for Android,且已按照 Wear OS 指南說明,在應用程式中建立穿戴式模組,現在則想在穿戴式模組中加入地圖。

為 Wear OS 模組新增依附元件

請確認應用程式 Wear OS 模組的 build.gradle 檔案中包含下列依附元件:

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.0'
}

如要進一步瞭解依附元件,請參閱這份指南中有關在 Wear OS 內定義版面配置的說明

加入可讓使用者結束應用程式的對話方塊

建議您使用 DismissOverlayView 在穿戴式裝置上顯示地圖。您可以使用 DismissOverlayView 類別來導入長按關閉 UI 模式,讓使用者只要按住螢幕不放 (長按) 即可結束應用程式。建議您使用這個模式,因為 Maps SDK for Android 會覆寫由左向右滑動的標準手勢 (通常用於結束穿戴式應用程式)。在 Google 地圖應用程式中,滑動手勢是用來平移地圖。

在版面配置定義中加入 DismissOverlayView 元素:

<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>

在活動中取得 DismissOverlayView 物件後,請設定簡介文字,讓使用者知道能利用長按手勢來結束應用程式,如下所示:

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);
    }
    ...
}

監聽長按手勢並呼叫 DismissOverlayView.show() 以顯示結束按鈕。使用者只要按下按鈕,系統便會終止活動:

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

新增地圖

請照常使用 onMapReady(GoogleMap) 回呼方法來取得 GoogleMap 物件的控制代碼。地圖準備就緒時就會觸發回呼。您可以透過回呼方法,在地圖中加入標記或折線、新增事件監聽器或是移動相機。以下範例說明如何在雪梨歌劇院附近新增標記:

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);
    }
}

啟用微光模式

Maps SDK for Android 支援穿戴式應用程式的微光模式。這類應用程式有時也稱為「持續顯示」(Always on) 應用程式。當使用者不再積極使用應用程式,系統就會啟用微光模式,以便穿戴式裝置持續顯示該應用程式。

在微光模式中,Maps SDK for Android 會顯示較不顯色的簡化版地圖以供使用,且當裝置從互動模式切換為微光模式時,地圖樣式也會自動調整。微光模式啟用時,所有標記、物件和 UI 控制項都會消失;這樣可以減少應用程式耗電量,並能與其他使用微光模式的應用程式 (例如錶面) 保持一致的外觀和風格。

請按照下列步驟操作,確保應用程式能使用地圖的微光模式:

  1. 更新 Android SDK 以加入 Android 5.1 (API 22 級) 或更新版本的平台,藉此取得可讓活動進入微光模式的 API。如需 SDK 更新方式的相關資訊,請參閱 Android 說明文件中有關新增 SDK 套件的解說。
  2. 應用程式資訊清單中將 targetSdkVersion 設為 22 以上,確保專案指定 Android 5.1 或更新的版本。
  3. 在應用程式的 build.gradle 檔案中加入穿戴式裝置依附元件,請參閱本頁面的範例
  4. 按照 Android 訓練課程「讓應用程式持續顯示」所述,在穿戴式應用程式資訊清單中加入穿戴式裝置共用程式庫項目。
  5. 按照 Android 訓練課程「讓應用程式持續顯示」所述,在手持裝置和穿戴式應用程式資訊清單中加入 WAKE_LOCK 權限。
  6. 建立一個延伸 WearableActivity 的活動。
  7. 在活動的 onCreate() 方法中呼叫 setAmbientEnabled() 方法,告知作業系統應用程式將持續顯示,這樣裝置關機時才會進入微光模式,而非返回錶面。
  8. 將地圖設為支援微光模式,方法是在活動的 XML 版面配置檔案中設定 map:ambientEnabled="true" 屬性,或是以程式輔助方式設定 GoogleMapOptions.ambientEnabled(true)。這項設定會通知 API 預先載入在微光模式中需要用到的地圖圖塊。
  9. 當活動切換至微光模式時,系統會呼叫穿戴式活動的 onEnterAmbient() 方法,覆寫 onEnterAmbient() 並呼叫 MapFragment.onEnterAmbient(ambientDetails)MapView.onEnterAmbient(ambientDetails)。API 會切換為彩度較低的非互動式地圖版本。
  10. 同樣地,在 onExitAmbient() 中呼叫 MapFragment.onExitAmbient()MapView.onExitAmbient(),API 就會切換為正常的地圖版本。

下列程式碼範例會在應用程式和地圖中啟用微光模式:

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();
    }
}

應用程式處於微光模式時,您可以更新畫面。如需大致瞭解內容更新方式及微光模式的詳細資訊,請參閱 Android 訓練課程「讓應用程式持續顯示」。

在 Wear OS 上使用街景服務

穿戴式裝置完整支援街景服務

如要讓使用者在瀏覽街景服務全景時退出應用程式,請使用 StreetViewPanorama.OnStreetViewPanoramaLongClickListener 介面來監聽長按手勢。當使用者長按街景服務圖片的任一處,您就會收到 onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation) 事件。呼叫 DismissOverlayView.show() 即可顯示結束按鈕。

程式碼範例

GitHub 提供了一個範例應用程式,可做為建構應用程式的範本;該範例說明了如何在 Wear OS 上設定基本的 Google 地圖。

Wear OS 的 Maps API 支援功能

本節將概述穿戴式裝置與手持裝置 (手機和平板電腦) 上的地圖,在支援功能方面有何差異。下方未提及的 API 功能會依完整 API 說明所述正常運作。

功能
完整互動模式和精簡模式

您可以在完整互動模式或精簡模式中使用 Maps SDK for Android。如果想提升穿戴式裝置的效能,而您的應用程式也不需要支援互動 (例如手勢、或平移/縮放地圖),不妨考慮使用精簡模式。

在精簡模式中,系統不會在使用者輕觸地圖時開啟 Google 地圖行動應用程式,在穿戴式裝置上也是如此。

如需精簡模式和完整互動模式的完整比較清單,請參閱精簡模式說明文件。

地圖工具列 穿戴式裝置上的地圖工具列停用,且無法啟用。
UI 控制項 穿戴式裝置上的 UI 控制項預設為停用,包括縮放、指南針和「我的位置」控制項。您可以照常使用 UiSettings 類別來啟用這些控制項。
手勢 單點觸控手勢會正常運作,例如輕觸並拖曳可平移地圖、輕觸兩下可放大地圖,雙指輕觸則可縮小地圖。 多點觸控手勢支援視使用者的裝置而有所不同。 多點觸控手勢範例包括:雙指推動傾斜地圖、雙指撥動縮放,以及雙指旋轉。
室內地圖和建築物 穿戴式裝置上的室內地圖功能預設為停用,您可以呼叫 GoogleMap.setIndoorEnabled(true) 來加以啟用。如果啟用了室內地圖,地圖會顯示預設樓層。 穿戴式裝置不支援層面挑選器 UI 元素。
圖塊疊加層 穿戴式裝置「不支援」圖塊疊加層

在 Wear OS 上使用 Maps API 開發應用程式的最佳做法

如何在應用程式中提供最佳使用者體驗:

  • 地圖應佔據大部分螢幕空間。穿戴式裝置的版型規格較小,想盡可能提高應用程式的可用性,就必須提供大版面地圖。
  • 規劃應用程式的使用體驗時,請務必考量到穿戴式裝置電量有限這點。如果讓螢幕持續待機並顯示地圖,將會影響電池效能。