我们建议 Wear OS 应用能够独立于手机运行,以便用户无需访问 Android 或 iOS 手机即可在手表上完成任务。如果您的手表应用需要手机互动,则必须将您的 Wear OS 应用标记为非独立式应用,并采取措施确保用户拥有手机应用。
规划您的应用
您可以使用 Android 应用包 自动为每个用户的设备配置生成优化的 Android 软件包工具包 (APK),这些工具包都在同一个应用列表下。这样,用户只需下载运行您的应用所需的代码和资源。
有关通过 Google Play 商店设置应用分发的信息,请参阅 打包和分发 Wear OS 应用 以及 Android 应用包入门指南。
对于新应用,目标 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 商店,因为并非所有手机(例如 iPhone)都支持 Play 商店。
以下部分介绍了两种场景的最佳实践
- 您的独立式手表应用需要您的手机应用。
- 您的手机应用需要您的独立式手表应用。
您还可以查看 数据层辅助程序示例,该示例展示了如何使用 数据层辅助程序库(属于 Horologist 的一部分)。这些辅助程序可让您监控手持设备和 Wear OS 设备之间的连接。有关以下部分中描述的类的更多信息,请参阅 Wear OS API 参考。该参考还包括有关 PhoneTypeHelper
类(其中包含 getPhoneDeviceType()
方法,该方法允许您的 Wear OS 应用检查配套手机是 Android 设备还是 iOS 设备)的信息。
指定用于检测应用的功能名称
对于与每种设备类型(手表或手机)对应的应用,请在 res/values/wear.xml
文件中为功能名称指定唯一的字符串。
例如,在您的移动模块中,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>
有关更多信息,请参阅 宣传功能。
应用检测和从手表打开 URL
您的手表应用可以检测用户的配套手机是否安装了您的手机应用。请按照以下步骤操作:
- 使用
CapabilityClient
检查您的手机应用是否安装在配对的手机上。有关更多信息,请参阅 GitHub 上的 数据层辅助程序示例。 - 如果您的手机应用未安装在手机上,请使用
PhoneDeviceType.getPhoneDeviceType()
方法检查手机的类型。有关详细信息,请参阅下一节。 - 如果返回
PhoneDeviceType.DEVICE_TYPE_ANDROID
,则该手机是 Android 手机。在 Wear OS 设备上调用RemoteActivityHelper.startRemoteActivity()
以在手机上打开 Play 商店。使用手机应用的市场 URI,它可能与 Wear 应用的 URI 不同。例如,使用 market://details?id=com.example.android.wearable.wear.finddevices 等市场 URI。 -
如果返回
PhoneDeviceType.DEVICE_TYPE_IOS
,则该手机是不可用 Play 商店的 iOS 手机。通过在 Wear OS 设备上调用RemoteActivityHelper.startRemoteActivity()
来打开 iPhone 上的 App Store。您可以指定应用的 iTunes URL,例如https://itunes.apple.com/us/app/yourappname
。从 Wear OS,您无法以编程方式确定您的手机应用是否安装在 iOS 设备上。作为最佳实践,请向用户提供一种手动触发打开 App Store 的机制。
注意:使用前面描述的 RemoteActivityHelper
API 指定从手表在手机上打开任何 URL,并且不需要手机应用。
检测配对手机类型的详细信息
这是一个使用 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
查找连接到用户手机的所有手表。更多信息,请参阅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将使用配套手机的位置数据。
仅获取必要数据
通常,从互联网获取数据时,只获取必要的数据。否则,可能会导致不必要的延迟、内存使用和电池消耗。
当手表通过蓝牙LE连接连接时,根据手表不同,您的应用可能只能访问每秒4千字节的带宽。因此,建议执行以下步骤:
- 审核您的网络请求和响应,查找仅手机应用需要的额外数据。
- 在通过网络将大型图像发送到手表之前,请缩小图像。
对于需要高带宽网络的情况,请参阅高带宽网络访问。
其他代码示例
数据层辅助示例进一步演示了本页介绍的API的使用。