让应用始终显示在 Wear 上

当用户不再使用手表时,Wear OS 会自动使处于活跃状态的应用进入低功耗模式。这称为“系统氛围模式”。如果用户在一定时间内再次与手表进行互动,Wear OS 会使用户重新进入应用中他们上次离开时的位置。

对于特定用例,例如用户想在跑步期间查看心率和步速,您还可以控制在低功耗氛围模式下显示哪些内容。在氛围模式和互动模式下均处于运行状态的 Wear OS 应用称为始终开启的应用。

让应用始终可见会影响电池续航时间,因此在为应用添加这项功能时,应该考虑这个影响。

配置项目

如需支持氛围模式,请按以下步骤操作:

  1. 根据创建和运行穿戴式应用页面上的配置,创建或更新您的项目。
  2. 向 Android 清单文件添加 WAKE_LOCK 权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />

启用始终开启模式

如需使用 AmbientLifecycleObserver 类,请执行以下操作:

  1. 实现 AmbientLifecycleObserver.AmbientLifecycleCallback 接口,如以下示例所示。在此阶段,这些方法是空的,但本指南稍后部分将详细介绍您应确保对可视化显示进行哪些更改,以便进入和退出氛围模式。

    Kotlin

        val ambientCallback = object : AmbientLifecycleObserver.AmbientLifecycleCallback {
          override fun onEnterAmbient(ambientDetails: AmbientLifecycleObserver.AmbientDetails) {
            // ... Called when moving from interactive mode into ambient mode.
          }
    
          override fun onExitAmbient() {
            // ... Called when leaving ambient mode, back into interactive mode.
          }
    
          override fun onUpdateAmbient() {
            // ... Called by the system in order to allow the app to periodically
            // update the display while in ambient mode. Typically the system will
            // call this every 60 seconds.
          }
        }
        
  2. 创建一个 AmbientLifecycleObserver 并注册 observer。通常,如果使用 Compose for Wear OS,此 observer 将用在 onCreate() 或顶级可组合项中,以允许在 activity 的整个生命周期内启用始终开启行为。

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
    
  3. 当不再需要始终开启行为时,请通过调用 removeObserver() 移除 observer。例如,您可以在 activity 的 onDestroy() 方法中调用此方法。

在氛围模式下修改视觉外观

默认情况下,在实现始终开启模式时,屏幕不会在手表进入氛围模式时改变其外观。您可以通过替换 AmbientLifecycleCallback 中的方法来修改此行为。

为了帮助节省电量,请执行以下操作:

  • 减少亮起的像素,并使屏幕大部分保持黑色。考虑在氛围模式下仅显示关键信息,并在用户进入互动模式时提供更多详细信息。
  • 调整各项内容,以降低更新频率。例如,使计时器显示最接近的分钟数,而不是最接近的秒数。
  • 在传递给 onEnterAmbient()AmbientDetails 对象中:
    • 如果设置了 deviceHasLowBitAmbient,请尽可能停用抗锯齿功能。
    • 如果设置了 burnInProtectionRequired,则定期调整可视化显示,并避免显示纯白色区域。

使用 Compose for Wear OS 时,您最好使用这些回调方法来更新状态,以便系统适当重组界面。

如需关于如何实现这一点的示例,请参阅以下资源: