創建錶盤服務 [Building a Watch Face Service]
標籤(空格分隔): Wear
翻譯項目GitHub歡迎更多小夥伴加入!
錶盤是作爲一個服務打包安裝在Android Wear中,當用戶安裝一個包含Watch app 和錶盤的手機APP時,錶盤將會同時出現在手機伴侶應用中和手錶變盤選擇器中。當用戶選擇需要顯示的錶盤時候,根據需要回調方法。
這節課將向你展示如何配置一個Android工程包括錶盤和錶盤服務。
創建和配置你的工程
在你的Android studio中創建Android Wear工程
- 打開 Android Studio
- 創建新工程
- 如果你沒有打開過工程,在歡迎界面點擊 New Project
- 如果你打開過工程,在 File 中選擇 New Project
- 提供一個應用名稱,然後點擊 Next
- 選擇這 Phone And Tablet 模式
- 在 Minimum SDK 下選擇 API 18
- 選擇 Wear 模式
- 在 Minimum SDK 下選擇 API 21 然後點擊 Next
- 選擇 Add No Activity 然後點擊 Next 在後面的兩個界面
- 點擊 Finish
- 點擊 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用於實現繪製錶盤、更新時間和其他相關的事情。爲了實現錶盤,你需要繼承CanvaWatchFaceService和CanvasWatchFaceService.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文件中添加錶盤實現的服務。