我们建议 Wear OS 应用独立于手机运行,这样用户无需访问 Android 或 iOS 手机就可以在手表上完成任务。如果您的手表应用需要手机互动,您必须将 Wear OS 应用标记为非独立应用,并采取措施确保用户有可用的手机应用。
规划应用
您可以使用 Android App Bundle,为同一应用详情下每个用户的设备配置自动生成经过优化的 Android 软件包套件 (APK)。这样,用户只需下载其运行您的应用所需的代码和资源。
如需了解如何设置应用以通过 Google Play 商店进行分发,请参阅打包和分发 Wear OS 应用,以及 Android App Bundle 入门指南。
对于新应用,目标 API 级别必须为 30 或更高级别。如需了解详情,请参阅满足 Google Play 的目标 API 级别要求。建议您将 targetSdkVersion
设置为 API 级别 30 (Wear OS 3),确保您的应用适用于最新平台版本。
如需了解网络请求和高带宽网络访问,请参阅 Wear OS 上的网络访问和同步。
将应用定义为 Wear OS 应用
您必须在应用的 Android 清单文件中定义
<uses-feature>
标记。如要表明这是手表应用,请添加如下所示的条目:
<manifest> ... <uses-feature android:name="android.hardware.type.watch" /> ... </manifest>
将应用标识为独立应用或非独立应用
手表应用既能被视为独立应用,又能被视为非独立应用:
- 独立应用:完全独立的应用,不要求使用手机应用作为核心 功能。尽管“在手机上打开”应用必须提供替代提示 让用户无需依赖 。
- 非独立应用:需要手机或其他设备上的应用才能实现非独立应用 核心功能此选项最适合无法轻松 通过二维码或短链接等替代方式, 完成核心应用功能,例如身份验证。
注意:即使对于非独立应用,用户也可以安装 Wear OS 应用优先于移动应用。因此,如果您的 Wear OS 应用检测到 附近的手持设备缺少必要的配套应用,提示用户 以安装配套应用。
Google 会在应用期间验证应用独立状态的准确性 。该值会影响应用在 Play 商店中的显示设置, 未共享网络的设备,例如未与手持式设备配对的 Wear OS 设备 设备。非独立应用,以及开发者误认为的应用 标为“独立” - 不适用于这些未共享网络的用户 设备。
在 Wear OS 应用中,在 Android 清单文件中设置
meta-data
元素 com.google.android.wearable.standalone
的值,以声明您的应用是独立应用还是非独立应用。
如果您的手表应用是一个完全独立的应用,您可以通过将 com.google.android.wearable.standalone
的值设置为 true
,向 Google Play 商店表明这一点:
<application> ... <meta-data android:name="com.google.android.wearable.standalone" android:value="true" /> ... </application>
如果您的手表应用是非独立应用且依赖于其他应用来实现核心功能,请将 com.google.android.wearable.standalone
的值设置为 false
。这表示手表应用需要使用其他设备,但这不会影响您的应用在 Google Play 商店中的宣传活动。
注意:即使 com.google.android.wearable.standalone
的值为 false
,用户也可以在安装手机应用前安装手表应用。因此,如果您的手表应用检测到配套应用缺少必要的手机应用(如本页所述),提示用户安装该手机应用。
共享代码和数据存储
您可以在 Wear OS 应用和手机应用之间共享代码。例如,网络的通用代码可以位于共享库中。
您也可以将专用于某个设备规格的代码放在单独的模块中。
您可以使用标准 Android 存储 API 在本地存储数据,就像在手机上存储一样。例如,您可以使用 SharedPreferences API 或 Room 持久性库。
在另一台设备上检测您的应用
您的手表应用和相应的手机应用可以各自检测另一应用是否可用。
手机应用或手表应用可使用 CapabilityClient
向配对的设备宣告自身的存在。它们可以静态或动态的方式实现这一点。
当某个应用在用户的 Wear OS 网络节点上(例如在手机、配对的手表或云端上)时,CapabilityClient
会允许其他应用对其进行检测。如需了解详情,请参阅宣告功能。
如果您的某个应用无法检测到另一个应用,您可以提示用户打开受影响设备上的 Play 商品详情。该解决方案适用于需要配对手机应用存在才能正常运行的手表应用。
您必须检查设备上的 Play Store 是否可用,因为某些手机(例如 iPhone)并不支持 Play Store。
以下部分介绍了针对两种场景的最佳实践:
- 您的独立手表应用需要您的手机应用
- 您的手机应用需要您的独立手表应用
您还可以查看
数据层帮助程序示例,展示了如何使用
<ph type="x-smartling-placeholder"></ph>
Datalayer 帮助程序库,属于
星座学家。这些帮助程序可让您监控手持设备
和 Wear OS 设备之间。
更多信息
请参阅
Wear OS API 参考文档。
该参考文档还包含有关
<ph type="x-smartling-placeholder"></ph>
PhoneTypeHelper
类,其中包含
getPhoneDeviceType()
方法,
Wear OS 应用可检查配对手机是 Android 设备还是 iOS 设备。
指定用于检测应用的功能名称
对于与每个设备类型(手表或手机)对应的应用,请在 res/values/wear.xml
文件中为功能名称指定一个唯一的字符串。
例如,在 mobile 模块中,wear.xml
文件可包含以下内容:
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@array/android_wear_capabilities"> <string-array name="android_wear_capabilities"> <item>verify_remote_example_phone_app</item> </string-array> </resources>
在 Wear OS 模块中,wear.xml
文件将包含一个不同的功能名称值,如下所示:
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@array/android_wear_capabilities"> <string-array name="android_wear_capabilities"> <item>verify_remote_example_wear_app</item> </string-array> </resources>
如需了解详情,请参阅通告功能。
从手表进行应用检测并打开网址
您的手表应用可检测用户的配对手机上是否装有您的手机应用。请按照以下步骤操作:
-
使用
CapabilityClient
检查您的手机应用是否已安装在配对的手机上。有关详情,请参阅 <ph type="x-smartling-placeholder"></ph> GitHub 上的数据层帮助程序示例。 -
如果您的手机应用未安装在手机上,请使用
PhoneDeviceType.getPhoneDeviceType()
方法检查手机类型。如需了解详情,请参阅下一部分。 -
如果返回
PhoneDeviceType.DEVICE_TYPE_ANDROID
,则表示该手机是 Android 手机。在 Wear OS 设备上调用RemoteActivityHelper.startRemoteActivity()
以打开手机上的 Play 商店。为您的手机应用使用市场 URI,该 URI 可能不同于您的 Wear 应用的 URI。例如,使用如下所示的市场 URI:market://details?id=com.example.android.wearable.wear.finddevices
-
如果返回
PhoneDeviceType.DEVICE_TYPE_IOS
,则表示手机是 iOS 手机(没有 Play 商店)。通过在 Wear OS 设备上调用RemoteActivityHelper.startRemoteActivity()
,打开 iPhone 上的 App Store。您可以指定应用的 iTunes 网址,例如https://itunes.apple.com/us/app/yourappname
。您无法通过 Wear OS 以程序化方式确定 iOS 设备上是否已安装您的手机应用。最佳实践是为用户提供一种机制,让其手动触发 App Store 的打开操作。
注意:使用之前介绍的 RemoteActivityHelper
API 指定通过手表在手机上打开任何网址,并且不需要手机应用。
检测配对手机类型的详细信息
以下代码段使用 getPhoneDeviceType()
方法检查与手表配对的手机类型:
Kotlin
var phoneDeviceType: Int = PhoneDeviceType.getPhoneDeviceType(context)
Java
int phoneDeviceType = PhoneDeviceType.getPhoneDeviceType(context);
getPhoneDeviceType()
方法可返回以下值:
返回值 | 说明 |
---|---|
DEVICE_TYPE_ANDROID
|
配对手机是 Android 设备。 |
DEVICE_TYPE_IOS
|
配对手机是 iOS 设备。 |
DEVICE_TYPE_UNKNOWN
|
配对手机是未知设备。 |
DEVICE_TYPE_ERROR
|
确定配对手机类型时出错,稍后应再次检查。 |
从 Android 手机启动应用检测
Android 手机可以检测用户的 Wear OS 设备上是否装有您的手表应用。请按照以下步骤操作:
-
使用
NodeClient
,查找连接到用户手机的所有手表。有关详情,请参阅 <ph type="x-smartling-placeholder"></ph> GitHub 上的数据层帮助程序示例。 -
使用
CapabilityClient
,检查用户的哪个手表安装了您的应用。 -
如果并非用户的所有手表都安装了您的应用,则允许用户通过
RemoteActivityHelper.startRemoteActivity()
方法从手机上打开其余 Wear OS 设备上的 Play 商店。为 Wear OS 应用使用市场 URI(它可能不同于您的手机应用的 URI)。例如,使用如下所示的市场 URI:market://details?id=com.example.android.wearable.wear.finddevices
与 iPhone 配对的手表的位置数据
对于与 iPhone 配对的手表,请使用一体化位置信息提供程序 (FLP) 获取手表上的位置数据。如需了解详情,请参阅在 Wear OS 上检测位置。
如果配对手机可用,FLP 将使用配对手机获取位置数据。
仅获取必要的数据
通常情况下,从互联网获取数据时,您应仅获取必要的数据。否则,可能会引发不必要的延迟、内存占用和电量消耗。
通过低功耗蓝牙连接手表时,您的应用获得的带宽可能只有每秒 4 千字节,具体取决于手表。因此,建议您执行以下步骤:
- 审核您的网络请求和响应,确保仅针对手机应用获取额外数据。
- 在通过网络将大图片发送到手表之前先将其压缩。
对于需要高带宽网络的情况,请参阅高带宽网络访问。
更多代码示例
通过 <ph type="x-smartling-placeholder"></ph> Datalayer 帮助程序示例进一步演示了如何使用本页介绍的 API。