Android Wear 开发全教程
第一部分:概览与准备工作
在开始编码之前,我们需要了解 Wear OS 是什么以及如何搭建开发环境。

什么是 Wear OS?
Wear OS 是 Google 为智能手表开发的操作系统,它基于 Android,但针对手表的小屏幕、圆形界面和触摸/旋转交互进行了深度优化,开发者可以使用熟悉的 Android 技术栈来创建手表应用,并与手机应用进行无缝协作。
Wear OS 的核心架构
一个典型的 Wear OS 应用由两部分组成:
- 手表端应用: 在手表上直接运行的应用,它负责处理手表 UI、显示通知、与传感器交互等。
- 手机端应用: 在配对的手机上运行的应用,它通常作为“后台”或“主机”,处理网络请求、复杂计算,并将数据发送给手表端。
这两者通过 Google Play Services for Wear OS 进行通信,实现数据同步和功能调用。
开发环境搭建
你需要准备以下工具:

- Android Studio: 官方集成开发环境,建议使用最新稳定版。
- Android SDK: Android Studio 会自动安装,请确保在 SDK Manager 中安装了:
- Android 10.0 (API level 29) 或更高版本的 SDK Platform。
- Wear OS API (通常在 "SDK Platforms" 标签页下,选择对应的 Wear OS 版本)。
- Android SDK Build-Tools。
- Android Emulator (用于模拟手表)。
- 一个 Wear OS 设备 (可选但推荐):
- 实体手表: 如 Fossil, Samsung Galaxy Watch, TicWatch 等。
- 模拟器: Android Studio 内置了 Wear OS 模拟器,可以快速测试应用。
创建你的第一个 Wear OS 项目
- 打开 Android Studio,选择 File > New > New Project...。
- 选择 Watch Face 或 Wear OS 模板,对于初学者,选择 Wear OS 模板下的 Wear OS App。
- 填写应用名称、包名等信息。
- 在 "Add an Activity to your Wear OS App" 界面,选择 "Wear OS UI Foundation" 或 "Wear OS Round Rect UI",这会为你生成一个包含基本 UI 的活动,非常适合学习。
- 点击 Finish,Android Studio 会自动为你创建一个包含手机端和手表端模块的项目。
第二部分:核心概念与 API
了解了环境,我们来看看 Wear OS 开发的核心。
数据层 - Data Layer
这是 Wear OS 最强大的特性之一,它简化了手表和手机之间的数据同步,你不需要手动处理连接、断开或网络请求,只需将数据放入 Data Layer,系统会自动处理同步。
-
DataItem: 用于传输小块、结构化的数据,发送一个消息、一个心率值或一个简单的命令。
PutDataRequest: 创建一个 DataItem 的请求。DataClient: 在手表端或手机端用于发送和接收 DataItem 的 API。
-
MessageStream: 用于传输流式数据,例如持续发送传感器数据或文件,它比 DataItem 更轻量,适合高频、小包的数据传输。
(图片来源网络,侵删)MessageClient: 用于发送和接收消息的 API。
-
Asset: 用于传输二进制数据,例如一张图片或一个音频文件,Asset 会自动在设备间同步。
示例:从手机发送一条消息到手表
在手机端代码中:
// Wearable.getCapabilityClient() 获取与手表的连接
PutDataRequest request = PutDataRequest.create("/message_path");
request.setData("Hello from Phone!".getBytes());
Task<DataItem> dataItemTask = Wearable.getDataClient(context).putDataItem(request);
在手表端代码中,你需要监听这个路径的数据变化:
// Wearable.getDataClient(context).addListener() 添加监听器 // 当收到数据时,onDataChanged 方法会被调用
通知 - Notifications
Wear OS 的通知是其核心交互方式,手机应用发送的标准通知会自动在手表上以优化的样式显示,你也可以使用 WearableExtender 来定制手表上的通知。
示例:发送一个自定义样式的通知
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, "default_channel")
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("New Message")
.setContentText("Hello from Wear OS!")
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
// 使用 WearableExtender 来添加手表特定的扩展
NotificationCompat.WearableExtender extender = new NotificationCompat.WearableExtender()
.setHintDisplayActionInline(true) // 在手表上直接回复
.setHintHideIcon(true); // 隐藏手表上的应用图标
Notification notification = extender.extend(notificationBuilder);
NotificationManagerCompat.from(context).notify(1, notification);
界面 - UI
Wear OS 的 UI 设计原则是 简洁、扫一眼即可获取信息。
- WearableRecyclerView: 这是你在 Wear OS 中最常用的布局容器,它继承自
RecyclerView,但内置了针对圆形屏幕的布局管理器(如WearableLinearLayoutManager)和滚动特效。 - Watch Face: 表盘是手表上最重要的 UI,你可以创建自定义表盘,显示时间、日期、步数等信息,这通常是一个独立的
WatchFaceService。 - Complications (表盘插件): 允许用户将你的应用信息(如天气、日程)添加到表盘上,你需要在
AndroidManifest.xml中声明ComplicationProviderService。 - Input Methods: 手表输入不便,Wear OS 提供了专门的输入控件,如:
WearableActionDrawerView: 从屏幕边缘滑出的操作抽屉。WearableDrawerView: 用于显示额外内容或选项的抽屉。Picker: 用于在少量选项中进行选择的滚动选择器。
传感器与后台服务
- 传感器访问: 和 Android 手机一样,你可以通过
SensorManager访问手表上的各种传感器,如心率传感器、加速度计、陀螺仪等。 - 后台服务:
WearableListenerService是一个非常重要的后台服务,当手表和手机断开连接后重新连接时,这个服务的onPeerConnected()和onPeerDisconnected()方法会被调用,非常适合用来同步数据或恢复状态。
第三部分:实战演练 - 创建一个简单的计数器应用
让我们动手创建一个应用,在手表上点击按钮,计数,并将结果同步到手机。
项目结构:
app(手机端)wear(手表端)
步骤 1: 配置 Data Layer 监听 (手表端 wear)
在手表端,我们需要监听来自手机的计数命令。
-
创建一个继承自
WearableListenerService的服务。public class CounterService extends WearableListenerService { @Override public void onMessageReceived(@NonNull MessageEvent messageEvent) { super.onMessageReceived(messageEvent); // 检查消息路径 if ("/counter_increment".equals(messageEvent.getPath())) { // 读取消息内容 (这里是数字) int increment = ByteBuffer.wrap(messageEvent.getData()).getInt(); // 更新UI (这里需要通过广播或LiveData等方式通知UI层) // 为了简化,我们直接更新一个静态变量 CounterActivity.incrementCounter(increment); } } } -
在
AndroidManifest.xml中注册这个服务:<service android:name=".CounterService" android:exported="true"> <intent-filter> <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" /> </intent-filter> </service>
步骤 2: 创建手表 UI (手表端 wear)
-
创建一个布局
activity_counter.xml,包含一个TextView和一个Button。<androidx.wear.widget.WearableLinearLayoutManager xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/counter_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0" android:textSize="50sp" /> <Button android:id="@+id/increment_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sync to Phone" /> </androidx.wear.widget.WearableLinearLayoutManager> -
在
CounterActivity.java中处理点击事件和显示逻辑。public class CounterActivity extends AppCompatActivity { private TextView counterText; private int counter = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_counter); counterText = findViewById(R.id.counter_text); Button button = findViewById(R.id.increment_button); button.setOnClickListener(v -> { counter++; counterText.setText(String.valueOf(counter)); // 将计数发送到手机 sendCounterToPhone(); }); } private void sendCounterToPhone() { new Thread(() -> { PutDataRequest request = PutDataRequest.create("/counter_data"); request.setData(ByteBuffer.allocate(4).putInt(counter).array()); Wearable.getDataClient(this).putDataItem(request); }).start(); } public static void incrementCounter(int increment) { // 注意:这里为了简化,直接操作UI,实际项目中应使用LiveData或Handler // CounterActivity activity = ...; // 获取Activity实例 // activity.counter += increment; // activity.counterText.setText(String.valueOf(activity.counter)); } }
步骤 3: 在手机端接收数据 (手机端 app)
- 同样,创建一个
WearableListenerService来监听手表的数据。public class PhoneListenerService extends WearableListenerService { @Override public void onDataChanged(@NonNull DataEventBuffer dataEvents) { super.onDataChanged(dataEvents); for (DataEvent event : dataEvents) { if (event.getType() == DataEvent.TYPE_CHANGED) { DataItem item = event.getDataItem(); if (item.getUri().getPath().equals("/counter_data")) { byte[] data = item.getData(); int counterValue = ByteBuffer.wrap(data).getInt(); Log.d("PhoneApp", "Received counter from watch: " + counterValue); // 更新手机UI或执行其他操作 } } } } } - 在手机端的
AndroidManifest.xml中注册服务:<service android:name=".PhoneListenerService" android:exported="true"> <intent-filter> <action android:name="com.google.android.gms.wearable.DATA_CHANGED" /> <data android:scheme="wear" android:host="*"/> </intent-filter> </service>
步骤 4: 运行与调试
- 将你的手表或 Wear OS 模拟器启动并解锁。
- 在 Android Studio 中,选择你的设备,然后点击 Run 'app'。
- 应用会同时安装到手机和手表上。
- 在手表上点击按钮,观察计数变化,并查看手机 Logcat 中的输出。
第四部分:进阶主题与最佳实践
电池优化
- 限制后台工作: 手表电池很小,避免不必要的后台任务。
- 使用 WorkManager: 对于需要可靠执行的后台任务(如同步数据),使用 WorkManager,它会智能地在设备充电或连接WiFi时执行。
- 优化传感器使用: 如果不需要持续监听传感器,请及时注销监听器。
性能优化
- 使用
WearableRecyclerView: 它针对手表性能进行了优化。 - 避免过度绘制: 保持 UI 简洁,减少不必要的层级。
- 图片优化: 使用 WebP 格式,并针对不同屏幕密度提供合适尺寸的图片。
设计指南
务必阅读 Google 官方的 Wear OS 设计指南,它详细介绍了如何为圆形屏幕设计、如何使用手势、以及如何创建直观的用户体验。
测试
- 使用模拟器: 快速迭代 UI 和基本逻辑。
- 在实体手表上测试: 必须在真实的硬件上测试,因为不同手表的屏幕、性能和传感器都有差异。
- 测试不同场景: 测试配对/断开、飞行模式、低电量等情况。
第五部分:资源与官方文档
- 官方文档: https://developer.android.com/training/wearables - 这是学习 Wear OS 的第一手、最权威的资料。
- Wear OS GitHub 示例: https://github.com/android/wear-os-samples - 包含了大量高质量的开源示例项目,覆盖了所有核心功能。
- Android Developers YouTube 频道: 有很多关于 Wear OS 开发的视频教程。
希望这份教程能为你打开 Wear OS 开发的大门!祝你编码愉快!
