杰瑞科技汇

Android Wear新手如何快速上手?

Android Wear 开发全教程

第一部分:概览与准备工作

在开始编码之前,我们需要了解 Wear OS 是什么以及如何搭建开发环境。

Android Wear新手如何快速上手?-图1
(图片来源网络,侵删)

什么是 Wear OS?

Wear OS 是 Google 为智能手表开发的操作系统,它基于 Android,但针对手表的小屏幕、圆形界面和触摸/旋转交互进行了深度优化,开发者可以使用熟悉的 Android 技术栈来创建手表应用,并与手机应用进行无缝协作。

Wear OS 的核心架构

一个典型的 Wear OS 应用由两部分组成:

  • 手表端应用: 在手表上直接运行的应用,它负责处理手表 UI、显示通知、与传感器交互等。
  • 手机端应用: 在配对的手机上运行的应用,它通常作为“后台”或“主机”,处理网络请求、复杂计算,并将数据发送给手表端。

这两者通过 Google Play Services for Wear OS 进行通信,实现数据同步和功能调用。

开发环境搭建

你需要准备以下工具:

Android Wear新手如何快速上手?-图2
(图片来源网络,侵删)
  1. Android Studio: 官方集成开发环境,建议使用最新稳定版。
  2. 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 (用于模拟手表)。
  3. 一个 Wear OS 设备 (可选但推荐):
    • 实体手表: 如 Fossil, Samsung Galaxy Watch, TicWatch 等。
    • 模拟器: Android Studio 内置了 Wear OS 模拟器,可以快速测试应用。

创建你的第一个 Wear OS 项目

  1. 打开 Android Studio,选择 File > New > New Project...
  2. 选择 Watch FaceWear OS 模板,对于初学者,选择 Wear OS 模板下的 Wear OS App
  3. 填写应用名称、包名等信息。
  4. 在 "Add an Activity to your Wear OS App" 界面,选择 "Wear OS UI Foundation""Wear OS Round Rect UI",这会为你生成一个包含基本 UI 的活动,非常适合学习。
  5. 点击 Finish,Android Studio 会自动为你创建一个包含手机端手表端模块的项目。

第二部分:核心概念与 API

了解了环境,我们来看看 Wear OS 开发的核心。

数据层 - Data Layer

这是 Wear OS 最强大的特性之一,它简化了手表和手机之间的数据同步,你不需要手动处理连接、断开或网络请求,只需将数据放入 Data Layer,系统会自动处理同步。

  • DataItem: 用于传输小块、结构化的数据,发送一个消息、一个心率值或一个简单的命令。

    • PutDataRequest: 创建一个 DataItem 的请求。
    • DataClient: 在手表端或手机端用于发送和接收 DataItem 的 API。
  • MessageStream: 用于传输流式数据,例如持续发送传感器数据或文件,它比 DataItem 更轻量,适合高频、小包的数据传输。

    Android Wear新手如何快速上手?-图3
    (图片来源网络,侵删)
    • 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)

在手表端,我们需要监听来自手机的计数命令。

  1. 创建一个继承自 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);
            }
        }
    }
  2. 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)

  1. 创建一个布局 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>
  2. 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)

  1. 同样,创建一个 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或执行其他操作
                    }
                }
            }
        }
    }
  2. 在手机端的 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: 运行与调试

  1. 将你的手表或 Wear OS 模拟器启动并解锁。
  2. 在 Android Studio 中,选择你的设备,然后点击 Run 'app'
  3. 应用会同时安装到手机和手表上。
  4. 在手表上点击按钮,观察计数变化,并查看手机 Logcat 中的输出。

第四部分:进阶主题与最佳实践

电池优化

  • 限制后台工作: 手表电池很小,避免不必要的后台任务。
  • 使用 WorkManager: 对于需要可靠执行的后台任务(如同步数据),使用 WorkManager,它会智能地在设备充电或连接WiFi时执行。
  • 优化传感器使用: 如果不需要持续监听传感器,请及时注销监听器。

性能优化

  • 使用 WearableRecyclerView: 它针对手表性能进行了优化。
  • 避免过度绘制: 保持 UI 简洁,减少不必要的层级。
  • 图片优化: 使用 WebP 格式,并针对不同屏幕密度提供合适尺寸的图片。

设计指南

务必阅读 Google 官方的 Wear OS 设计指南,它详细介绍了如何为圆形屏幕设计、如何使用手势、以及如何创建直观的用户体验。

测试

  • 使用模拟器: 快速迭代 UI 和基本逻辑。
  • 在实体手表上测试: 必须在真实的硬件上测试,因为不同手表的屏幕、性能和传感器都有差异。
  • 测试不同场景: 测试配对/断开、飞行模式、低电量等情况。

第五部分:资源与官方文档

希望这份教程能为你打开 Wear OS 开发的大门!祝你编码愉快!

分享:
扫描分享到社交APP
上一篇
下一篇