Android Wear SDK 中文 ---- 創建錶盤 [Creating Watch Faces]

創建錶盤服務 [Building a Watch Face Service]

標籤(空格分隔): Wear

英文原版

翻譯項目GitHub歡迎更多小夥伴加入!

翻譯目錄


錶盤是作爲一個服務打包安裝在Android Wear中,當用戶安裝一個包含Watch app 和錶盤的手機APP時,錶盤將會同時出現在手機伴侶應用中和手錶變盤選擇器中。當用戶選擇需要顯示的錶盤時候,根據需要回調方法。

這節課將向你展示如何配置一個Android工程包括錶盤和錶盤服務。


創建和配置你的工程

在你的Android studio中創建Android Wear工程

  1. 打開 Android Studio
  2. 創建新工程
    • 如果你沒有打開過工程,在歡迎界面點擊 New Project
    • 如果你打開過工程,在 File 中選擇 New Project
  3. 提供一個應用名稱,然後點擊 Next
  4. 選擇這 Phone And Tablet 模式
  5. 在 Minimum SDK 下選擇 API 18
  6. 選擇 Wear 模式
  7. 在 Minimum SDK 下選擇 API 21 然後點擊 Next
  8. 選擇 Add No Activity 然後點擊 Next 在後面的兩個界面
  9. 點擊 Finish
  10. 點擊 View > ToolWindows > Project 在這個窗口
    Android Studio 創建 手錶 和 電話工程,更多信息可以參考創建一個工程創建一個工程

依賴關係

Wearable Support Library 庫提供了一些必須的類,你可以繼承這些類去實現錶盤。Google play services 客戶端庫(play-services 和 play-services-wearable)庫是用來同步手機APP和手錶APP之間數據。可以參見
Wearable Data Layer API

穿戴支持庫API參考

以下參考信息將告訴你實現錶盤所需要的一些類的信息,詳細穿戴庫信息可以參考API reference documentation

Note:歡迎使用Android studio 去構建你的項目,它提供了工程設置,包含庫,方便打包。

權限申明

錶盤需要 PROVIDE_BACKGROUND 和 WAKE_LOCK 權限, 同時在你的手機APP中和穿戴設備APP工程中的manifest文件中添加以下權限。

<manifest ...>
    <uses-permission
        android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
    <uses-permission
        android:name="android.permission.WAKE_LOCK" />
    ...
</manifest>

注意:手機APP中必須包含穿戴設備APP中的所有權限。


實現服務和回調函數

錶盤在Android Wear 中是一個被實現的Services。當錶盤活動時,每當時間改變,或者有事件觸發(像進入豆子模式,或者受到一個通知)系統都會去調用在Services中的這些回調方法。Services用於實現繪製錶盤、更新時間和其他相關的事情。爲了實現錶盤,你需要繼承CanvaWatchFaceServiceCanvasWatchFaceService.Engine類,然後複寫CanvasWatchFaceService.Engine中的回調方法,這些類屬於Wearable Support Library

下面列出的你需要實現的回調方法

public class AnalogWatchFaceService extends CanvasWatchFaceService {

    @Override
    public Engine onCreateEngine() {
        /* provide your watch face implementation */
        return new Engine();
    }

    /* implement service callback methods */
    private class Engine extends CanvasWatchFaceService.Engine {

        @Override
        public void onCreate(SurfaceHolder holder) {
            super.onCreate(holder);
            /* initialize your watch face */
        }

        @Override
        public void onPropertiesChanged(Bundle properties) {
            super.onPropertiesChanged(properties);
            /* get device features (burn-in, low-bit ambient) */
        }

        @Override
        public void onTimeTick() {
            super.onTimeTick();
            /* the time changed */
        }

        @Override
        public void onAmbientModeChanged(boolean inAmbientMode) {
            super.onAmbientModeChanged(inAmbientMode);
            /* the wearable switched between modes */
        }

        @Override
        public void onDraw(Canvas canvas, Rect bounds) {
            /* draw your watch face */
        }

        @Override
        public void onVisibilityChanged(boolean visible) {
            super.onVisibilityChanged(visible);
            /* the watch face became visible or invisible */
        }
    }
}

CanvasWatchFaceService 類提供了一個View.invalidate()方法,你可以調用你的實現類中的 invalidate()方法,讓系統重新繪製錶盤,你只能在主UI線程中使用此方法.對於沒有界面的其他線程,你可調用postInvalidate()方法。

對於CanvasWatchFaceService.Engine 類中跟多回調方法的介紹 請參考Drawing Watch Faces


註冊表盤服務

在你實現了錶盤服務之後,你應該在Mainifest文件中註冊你的錶盤Services.當用戶安裝APP.系統會根據Services信息在手機伴侶程序和手錶錶盤選擇器中顯示錶盤。
下面代碼將向你展示在 application 標籤中如何註冊表盤Services

<service
    android:name=".AnalogWatchFaceService"
    android:label="@string/analog_name"
    android:permission="android.permission.BIND_WALLPAPER" >
    <meta-data
        android:name="android.service.wallpaper"
        android:resource="@xml/watch_face" />
    <meta-data
        android:name="com.google.android.wearable.watchface.preview"
        android:resource="@drawable/preview_analog" />
    <meta-data
        android:name="com.google.android.wearable.watchface.preview_circular"
        android:resource="@drawable/preview_analog_circular" />
    <intent-filter>
        <action android:name="android.service.wallpaper.WallpaperService" />
        <category
            android:name=
            "com.google.android.wearable.watchface.category.WATCH_FACE" />
    </intent-filter>
</service>

Note:這裏的註冊只在手錶工程中

com.google.android.wearable.watchface.preview 該定義用來指定錶盤預覽圖,這個預覽圖將被用在手機伴侶程序和手邊錶盤選擇器中展示。對於這張圖片,你可以把錶盤運行在手錶上或者模擬器上然後截個圖。在手錶hdpi屏幕設備上,這張預覽圖尺寸是 320x320 pixels

不起來不同的錶盤能同時提供圓形和方形的預覽圖片,你可以指定提供圓形圖片,使用com.google.android.wearable.watchface.preview_circular 參數值。如果一個錶盤包含兩個預覽圖片,在手機伴侶和手錶錶盤選擇器上將會顯示適當的那個,如果再圓的錶盤上,但是沒有提供圓形預覽圖,那麼將會把方形預覽圖裁剪作爲圓形錶盤的預覽圖。

android.service.wallpaper 的條目指定了資源文件watch_face.xml,它包含wallpaper元素
你的手錶APP能包含多個錶盤,你必須在Manifest文件中添加錶盤實現的服務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章