当用户关闭设备时,Wear OS 会自动让处于活跃状态的应用进入低功耗模式 延长电池续航时间这称为“系统氛围模式”。如果用户与 手表在特定时间范围内再次访问,Wear OS 会让用户返回到应用中, 没关系。
对于特定用例,例如,用户想在锻炼期间查看心率和步速 您 还可以控制低功耗氛围模式下显示的内容。可运行的 Wear OS 应用 在氛围模式和互动模式下都称为始终开启的应用。
让应用始终可见会影响电池续航时间,因此在添加应用时要考虑到这种影响 向您的应用添加这项功能
配置项目
如需支持氛围模式,请按以下步骤操作:
- 根据此页面上的配置创建或更新您的项目, 创建 和运行穿戴式应用页面。
- 向 Android 清单文件添加
WAKE_LOCK
权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
启用始终开启模式
要使用
AmbientLifecycleObserver
类,请执行以下操作:
-
实施
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. } }
-
创建一个
AmbientLifecycleObserver
并注册 observer。通常情况下, 将在onCreate()
或顶级可组合项(如果使用 Compose for Wear OS)中使用,以实现 允许在 activity 的整个生命周期内启用始终开启行为。Kotlin
private val ambientObserver = AmbientLifecycleObserver(activity, callback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(observer) // ... }
- 在 Always-on 时,通过调用
removeObserver()
移除观察器 行为。例如,您可以在onDestroy()
方法 活动。
始终开启的应用可以移至后台
从 Wear OS 5 开始,系统会在以下时间过后将始终开启的应用移至后台: 它们会在氛围模式下显示一段时间。用户可以 在系统设置中配置超时。
如果始终开启的应用显示正在进行的用户任务的相关信息(例如 音乐播放或健身课程——您可能希望保留持续性活动 可见。为此,请使用 Ongoing Activity API 发布 与始终开启的活动相关联的持续性通知。
为了让系统识别持续性活动, 通知的触摸 intent 必须指向始终开启的 activity,如 以下代码段:
// Create a pending intent that point to your always-on activity
val touchIntent =
PendingIntent.getActivity(
context,
0,
Intent(context, MyAlwaysOnActivity::class.java),
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val notificationBuilder =
NotificationCompat.Builder(this, CHANNEL_ID)
// ...
.setOngoing(true)
val ongoingActivity =
OngoingActivity.Builder(
applicationContext, NOTIFICATION_ID, notificationBuilder
)
// ...
.setTouchIntent(touchIntent)
.build()
ongoingActivity.apply(applicationContext)
notificationManager.notify(
NOTIFICATION_ID,
notificationBuilder.build()
)
在氛围模式下修改视觉外观
默认情况下,在实现始终开启模式时,屏幕不会更改其
手表进入氛围模式时的外观。您可以修改这一
通过覆盖
AmbientLifecycleCallback
。
为了帮助节省电量,请执行以下操作:
- 减少亮起的像素,并使屏幕大部分保持黑色。考虑 在氛围模式下仅显示重要信息, 当用户进入互动模式时触发。
- 调整各项内容,以降低更新频率。例如,显示计时器 (精确到分钟,而不是最接近的秒)。
- 在
AmbientDetails
中 对象传递给onEnterAmbient()
: <ph type="x-smartling-placeholder">- </ph>
- 如果设置了
deviceHasLowBitAmbient
,请尽可能停用抗锯齿功能。 - 如果设置了
burnInProtectionRequired
,则调整可视化显示顺序 并避开纯白色区域
- 如果设置了
使用 Compose for Wear OS 时,我们建议您使用以下回调方法 以更新状态,以便系统重组您的 界面设计得当。
有关如何实现此功能的示例,请查看基于 Compose 的
GitHub 上的练习示例,该示例使用 AmbientAware
来自 Horologist 库中的可组合项。