打造中国版 Wear OS 应用

打造中国版 Wear OS 应用时,您需要考虑未预安装 Google Play 服务的手机。本页介绍了开发者可能需要针对中国市场进行哪些常见的变更。

使用正确的 Google Play 服务版本

Google Play 服务 10.2.0 版为 Fused Location Provider API 和 Data Layer API 提供全球支持。如果您使用这些 API 来确保在中国支持更多类型的 Wear OS 设备,则必须使用此版本的 Google Play 服务。在其他情况下,此依赖项是可选的。

注意:虽然 Google Play 服务现在包含 Wear OS 应用的 API,但中国版 Wear OS 应用应继续使用与 GoogleApiClient 相关的 API;请参阅访问 Wearable API。

Fused Location Provider API

如果您使用的是 Fused Location Provider API,请在 Wear OS 模块的 build.gradle 文件中添加以下依赖项:

Groovy

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-location:10.2.0'
}

Kotlin

dependencies {
    ...
    implementation("com.google.android.gms:play-services-location:10.2.0")
}

Data Layer API

如果您的应用使用 Data Layer API,需要将以下行添加到 Wear OS 模块的 build.gradle 文件中。该行要求使用 10.2.0 版的客户端库。

Groovy

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-wearable:10.2.0'
    ...
}

Kotlin

dependencies {
    ...
    implementation("com.google.android.gms:play-services-wearable:10.2.0")
    ...
}

将以下代码行添加到移动设备模块的 build.gradle 文件中。将 Google Play 服务依赖项替换为对 10.2.0 版本的引用。

Groovy

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-wearable:10.2.0'
}

Kotlin

dependencies {
    ...
    implementation("com.google.android.gms:play-services-wearable:10.2.0")
}

身份验证

在实现身份验证之前,请检查您的用例,以查看是否确实需要身份验证。例如,对于提供天气预报的应用,可能不需要登录,因而无需进行身份验证。

如果您确实需要身份验证,我们建议您使用 AndroidX OAuth 2.0 库。这需要使用采用 PKCE 的授权代码授权流程。您也可以使用在穿戴式设备上进行身份验证中所述的其他方法。不建议使用穿戴式设备支持库。

如需了解详情,请参阅 GitHub 上的 Wear OS OAuth 示例。

桥接通知

中国不支持桥接通知。仅当 Wear 设备使用蓝牙连接到手机时,才会将手机通知桥接到 Wear OS。

位置和地图坐标兼容性

使用 FusedLocationProvider (FLP) 检测用户在中国的位置,检测方式与在世界其他地方的检测方式一样。这样可确保您的应用获取最实用的信息,而不考虑手表硬件以及与手表配对的手机平台。使用 FLP 还会增加 Wear OS 平台中内置的电池优化功能。

将 FusedLocationProvider 与第三方地图 SDK 集成时,请考虑提供程序之间的坐标兼容性。FusedLocationProvider 按照 WGS84 标准报告位置信息。请务必视情况转换坐标系。

Google 健身支持

中国支持 Google 健身的累计计步器、活动时间和心肺强化分数,相关历史记录最多可保留七天。您可以在不提供用户凭据的情况下查看此历史记录。

语音操作支持

Wear OS 平台提供了一些基于用户操作(如“显示心率”或“设置闹钟”)的语音 intent。这可让用户说出他们想要执行的操作,然后让系统确定要启动的最佳 activity。

当用户说出语音操作时,您的应用可以过滤为了启动 activity 而触发的 intent。如需在后台启动服务,可显示一个 activity 作为视觉提示,并在此 activity 中启动该服务。请务必调用 finish() 来消除视觉提示。

下面列出了 Wear OS 平台支持的语音 intent:

类别 示例 intent 规格
约车 打车去三里屯 操作

com.google.android.gms.actions.RESERVE_TAXI_RESERVATION

Extra

to:识别的目的地

extra 是可选的。

设置闹钟 设置一个明早七点的闹钟

操作

android.intent.action.SET_ALARM

Extra

android.provider.AlarmClock.EXTRA_HOUR:一个整数,表示闹铃的小时

android.provider.AlarmClock.EXTRA_MINUTES:一个整数,表示闹铃的分钟

这些 extra 是可选的。请同时提供这两个 extra 或都不提供。

设置计时器 设置一个三分钟的倒计时 操作

android.intent.action.SET_TIMER

Extra

android.provider.AlarmClock.EXTRA_LENGTH:一个整数,范围为 1 到 86400(24 小时的秒数),表示计时器的时长

启动秒表 开始计时 操作

com.google.android.wearable.action.STOPWATCH

开始或停止骑车 开始骑车 操作

vnd.google.fitness.TRACK

MIME 类型

vnd.google.fitness.activity/biking

Extra

actionStatus:一个字符串,在开始时值为 ActiveActionStatus,在停止时值为 CompletedActionStatus

开始或停止跑步 开始跑步 操作

vnd.google.fitness.TRACK

MIME 类型

vnd.google.fitness.activity/running

Extra

actionStatus:一个字符串,在开始时值为 ActiveActionStatus,在停止时值为 CompletedActionStatus

开始或停止锻炼 开始锻炼 操作

vnd.google.fitness.TRACK

MIME 类型

vnd.google.fitness.activity/other

Extra

actionStatus:一个字符串,在开始时值为 ActiveActionStatus,在停止时值为 CompletedActionStatus

显示心率 查看心率 操作

vnd.google.fitness.VIEW

MIME 类型

vnd.google.fitness.data_type/com.google.heart_rate.bpm

显示步数 查看步数 操作

vnd.google.fitness.VIEW

MIME 类型

vnd.google.fitness.data_type/com.google.step_count.cumulative

导航 导航去三里屯 操作

android.intent.action.VIEW

数据

geo:latitude,longitude?q=融科资讯中心

语音助理还可以使用现有的 Android 通用 intent 来触发某些行为(如适用)。

模拟器支持

您可以使用中国版 Wear OS 模拟器映像来测试您的应用。Android Studio 3.0 及更高版本支持此功能。

如需在中国版模拟器上测试您的应用,请执行以下操作:

  1. 安装 Android 模拟器。
  2. 通过 SDK 管理器下载中国版 Wear OS 映像。使用 Wear OS 3.5(API 级别 30)版本。
  3. 创建 AVD 配置文件时,选择使用中国版 Wear OS 映像。
  4. 运行中国版 Wear OS 模拟器以进行开发。
  5. 图 1. 中国版 Wear OS 模拟器示例。

此版本的 Wear OS 模拟器附带多个预安装应用:

  • 氛围模式
  • 通讯录
  • Google 手写输入
  • Google Play 服务
  • 适用于 Wear OS 的健康服务
  • 通过启动指令识别 LE 设备
  • 拼音
  • Play 商店(适用于中国的设备)
  • 怀表
  • TalkBack
  • 表盘(模拟和数字版本)
  • Wear 核心服务

启动特定应用专属的蓝牙和 Wi-Fi 通道

Wear OS 会自动路由网络请求。在大多数情况下,不要求应用打开特定于应用的蓝牙和 Wi-Fi 通道。

如果应用在中国请求特定于应用的蓝牙和 Wi-Fi 通道,则该请求将静默失败。系统会显示一个对话框,要求用户进行确认。用户确认后,系统会打开相应通道。每次都会发生这种情况,而不仅仅是在首次使用时。调用 BluetoothAdapter.enable() 或 WifiManager.setEnabled(true)。

注意:对于面向 Android 10(API 级别 29)或更高版本的应用,如需调用 WifiManager.setEnabled(),它必须是系统应用或设备策略控制器 (DPC)。

权限审核模式

在中国,中国版 Wear OS 设备在权限审核模式下运行,这对如何使用 targetApiLevel 低于 23 的应用施加了一些限制:请查看以下限制:

  • 即使在安装时授予了相关权限,当 targetApiLevel 低于 23 的应用首次启动时,系统也会显示一个对话框,要求用户确认此应用的权限。
  • 在首次使用应用之前,应用中的组件(如广播接收器、服务和 activity)不会响应相应的事件。

因此,我们建议您使用 targetApiLevel 23 或更高版本,并采用应用权限最佳实践。

使用其他 Google Play 服务 API

如果您的应用使用 Google Play 服务 API 而不是 Wearable API,那么您的应用需要检查这些 API 在运行时是否可用以及是否能够相应地做出响应。检查 Google Play 服务 API 可用性的方式有以下两种:

  1. 使用独立的 GoogleApiClient 实例来连接到其他 API。此接口包含回调以提醒您的应用连接成功还是失败。如果连接失败, ConnectionResult 会显示 API_UNAVAILABLE。如需了解如何处理连接失败的情况,请参阅访问 Google API。
  2. 使用 GoogleApiClient.Builder 的 addApiIfAvailable() 方法以连接到必需的 API。在 onConnected() 回调触发后,使用 hasConnectedApi() 方法以确保所请求的每个 API 均已正确连接。

在中国分发应用

为了有效地覆盖中国版 Wear OS 的用户,您可以通过第三方 Wear OS 应用商店分发,例如: