打造中国版 Wear OS 应用

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

使用正确的 Google Play 服务版本

Google Play 服务 10.2.0 版为 Fused Location Provider APIData 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 库。这需要使用采用 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.BuilderaddApiIfAvailable() 方法以连接到必需的 API。在 onConnected() 回调触发后,使用 hasConnectedApi() 方法以确保所请求的每个 API 均已正确连接。

在中国分发应用

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