Android Wear SDK 中文 ---- 创建表盘 [Creating Watch Faces]
2016-04-13 16:46
441 查看
创建表盘服务 [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 documentationNote:欢迎使用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文件中添加表盘实现的服务。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories