一律開啟應用程式和系統微光模式

當使用者不再使用手錶時,Wear OS 會自動將應用程式改為低功率模式。這就是所謂的「系統微光模式」。如果使用者與手錶互動,且符合下列任一條件,應用程式就會恢復運作:

  • 使用者互動發生在特定時間範圍內 (在逾時前)。
  • 應用程式已宣告並啟動持續性活動

對於特定用途,例如,如果使用者想在跑步期間查看心率和配速,也可以控制系統微光模式所顯示的內容。在微光模式和互動模式中執行的 Wear OS 應用程式,稱為「一律啟用的應用程式」。

持續顯示應用程式會影響電池續航力,因此在應用程式新增這項功能時,請注意這項影響。

設定專案

如要支援微光模式,請按照下列步驟操作:

  1. 根據「建立及執行穿戴式應用程式」頁面上的設定來建立或更新專案。
  2. (僅適用於 Wear OS 4 以下版本) 將 WAKE_LOCK 權限新增至 Android 資訊清單檔案:
<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="33"/>

啟用一律開啟模式

從 Wear OS 6 開始,如果應用程式的 targetSdkVersion 設為 36 以上,則預設為一律開啟。這些應用程式會在系統環境模式中顯示一段時間,無需任何設定。 如果應用程式的 targetSdkVersion 低於 36,或是應用程式需要在 Wear OS 5 以下版本上執行,請使用 AmbientLifecycleObserver 類別,讓應用程式保持開啟狀態。

使用 AmbientLifecycleObserver 類別回應微光模式事件

應用程式也可以使用 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,並註冊觀察器。一般而言,使用 Wear OS 版 Compose 時,onCreate() 或頂層可組合函式會使用這項元素,在整個活動生命週期啟用「一律打開」行為。

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
  3. 不再需要「一律打開」行為時,呼叫 removeObserver() 即可移除觀察器。舉例來說,您可以在活動的 onDestroy() 方法中呼叫這個方法。

使用 TimeText 小工具更新時間文字

自 Wear OS 6 起,TimeText 小工具會支援微光模式。如果應用程式只需要在環境模式下每分鐘更新一次時間文字,您可以只使用 TimeText 小工具,而不使用 AmbientLifecycleObserver

持續待機應用程式可移至背景

從 Wear OS 5 開始,系統會在持續待機應用程式在微光模式中顯示一段時間後,將其移至背景。使用者可以在系統設定中設定逾時值。

如果您的一律開啟應用程式會顯示有關使用者進行中工作的資訊 (例如音樂播放或健身課程),建議您在工作結束前,讓持續進行的活動保持可見。如要這麼做,請使用 Ongoing Activity API 發布與永久連線活動相關聯的持續性通知。

為了讓系統辨識持續進行的活動,持續進行通知的觸控意圖必須指向持續運作的活動,如以下程式碼片段所示:

// 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 中的方法。

為節省電力,請採取下列做法:

  • 減少顯示像素。建議您只在微光模式下顯示重要資訊,使用者進入互動模式後再提供其他詳細資訊。
  • 讓螢幕至少有 85% 的部分為黑色、移除填充色彩,並使用輪廓來呈現按鈕和大型圖示。
  • 避免顯示多餘資訊,例如非功能性品牌和背景圖片。
  • 在啟用和一律顯示模式下,元素應保持在相同位置,並一律顯示時間。
  • 調整各種內容,降低更新頻率。例如讓計時器顯示最接近的分鐘數,而非最接近的秒數。
  • 針對經常更新的英數內容 (例如距離或時間),移除或顯示預留位置 UI。
  • 移除頻繁更新的進度指標,例如倒數環和媒體工作階段。
  • 進入 Always On 模式時,如果使用者先前曾在應用程式中瀏覽設定或設定畫面,建議您改為在應用程式中顯示更相關的畫面。
  • 在傳遞至 onEnterAmbient()AmbientDetails 物件中:
    • 如果已設定 deviceHasLowBitAmbient,請盡可能停用反鋸齒功能。
    • 如果已設定 burnInProtectionRequired,請定期調整視覺呈現方式,避免顯示實心白色區域。
  • 避免在微光模式下執行持續動畫。自 Wear OS 5.1 起,動畫師可能會在微光模式下停止執行。

不間斷顯示檢查清單

在某些情況下,您可能會希望在裝置切換不同狀態時,盡可能掌控螢幕畫面,例如健身應用程式希望避免在運動期間讓錶面顯示在螢幕上。在這些情況下,請採取下列行動:

  1. 實作 AmbientLifecycleObserver.AmbientLifecycleCallback 介面。
  2. 建立新的低耗電版面配置,以便在裝置處於系統微光模式時使用。
  3. 在健身期間,請實作持續性活動

如需相關範例,請查看 GitHub 上以 Compose 為基礎的 Exercise 範例,這個範例會使用 Horologist 程式庫中的 AmbientAware 可組合函式。