标签(空格分隔): Wear
英文原版
翻译项目GitHub欢迎更多小伙伴加入!
翻译目录
表盘是作为一个服务打包安装在Android Wear中,当用户安装一个包含Watch app 和表盘的手机APP时,表盘将会同时出现在手机伴侣应用中和手表变盘选择器中。当用户选择需要显示的表盘时候,根据需要回调方法。
这节课将向你展示如何配置一个Android工程包括表盘和表盘服务。
在你的Android studio中创建Android Wear工程
Wearable Support Library 库提供了一些必须的类,你可以继承这些类去实现表盘。Google play services 客户端库(play-services 和 play-services-wearable)库是用来同步手机APP和手表APP之间数据。可以参见
Wearable Data Layer API
以下参考信息将告诉你实现表盘所需要的一些类的信息,详细穿戴库信息可以参考API reference documentation
Note:欢迎使用Android studio 去构建你的项目,它提供了工程设置,包含库,方便打包。
表盘需要 PROVIDE_BACKGROUND 和 WAKE_LOCK 权限, 同时在你的手机APP中和穿戴设备APP工程中的manifest文件中添加以下权限。
...>
"com.google.android.permission.PROVIDE_BACKGROUND" />
"android.permission.WAKE_LOCK" />
...
注意:手机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文件中添加表盘实现的服务。