Ứng dụng luôn bật và chế độ môi trường xung quanh của hệ thống

Wear OS tự động xử lý việc chuyển sang chế độ tiết kiệm pin cho một ứng dụng đang hoạt động khi người dùng không dùng đồng hồ. Đây được gọi là chế độ môi trường xung quanh của hệ thống. Nếu người dùng tương tác lại với đồng hồ trong một khung thời gian nhất định, thiết bị Wear OS sẽ đưa người dùng quay lại nơi họ đã dừng lại trong ứng dụng.

Đối với các trường hợp sử dụng cụ thể, ví dụ: người dùng muốn xem nhịp tim và nhịp độ trong một chạy—bạn cũng có thể điều khiển nội dung hiển thị ở chế độ môi trường xung quanh tiết kiệm pin. Các ứng dụng Wear OS chạy được ở cả chế độ môi trường xung quanh và chế độ tương tác đều được gọi là ứng dụng luôn bật.

Việc cho phép một ứng dụng liên tục xuất hiện sẽ ảnh hưởng đến thời lượng pin, vì vậy bạn hãy cân nhắc ảnh hưởng đó khi thêm tính năng này cho ứng dụng của bạn.

Định cấu hình dự án

Để hỗ trợ chế độ môi trường xung quanh, hãy làm theo các bước sau:

  1. Tạo hoặc cập nhật dự án của bạn dựa vào cấu hình trên trang Tạo và chạy ứng dụng cho thiết bị đeo.
  2. Thêm quyền WAKE_LOCK vào tệp kê khai Android:
<uses-permission android:name="android.permission.WAKE_LOCK" />

Bật chế độ luôn bật

Để sử dụng AmbientLifecycleObserver, hãy làm như sau:

  1. Triển khai giao diện AmbientLifecycleObserver.AmbientLifecycleCallback, như trong ví dụ sau. Ở giai đoạn này, các phương thức sẽ trống, nhưng ở phần sau của hướng dẫn sẽ cung cấp thông tin chi tiết về những thay đổi bạn phải đảm bảo mình đang tạo hình ảnh để vào và thoát khỏi chế độ môi trường xung quanh.

    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. Tạo AmbientLifecycleObserver rồi đăng ký trình quan sát. Thông thường, sẽ được dùng trong onCreate() hoặc thành phần kết hợp cấp cao nhất nếu sử dụng Compose cho Wear OS, để cho phép bật hành vi luôn bật trong suốt vòng đời của hoạt động.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
    
  3. Xoá trình quan sát bằng cách gọi removeObserver() khi hành vi luôn bật không còn cần thiết nữa. Ví dụ: bạn có thể gọi phương thức này trong phương thức onDestroy() của hoạt động.

Ứng dụng luôn bật có thể chuyển sang chế độ nền

Kể từ Wear OS 5, hệ thống sẽ chuyển các ứng dụng luôn bật sang chế độ nền sau khi các ứng dụng đó hiển thị ở chế độ môi trường xung quanh trong một khoảng thời gian nhất định. Người dùng có thể định cấu hình thời gian chờ trong phần cài đặt hệ thống.

Nếu ứng dụng luôn bật của bạn hiển thị thông tin về một tác vụ đang diễn ra của người dùng (chẳng hạn như phát nhạc hoặc một phiên tập thể dục), thì bạn nên hiển thị hoạt động đang diễn ra cho đến khi tác vụ kết thúc. Để thực hiện việc này, hãy sử dụng Ongoing Activity API để đăng một thông báo hiển thị liên tục được liên kết với hoạt động luôn bật của bạn.

Để hệ thống nhận ra hoạt động đang diễn ra, lệnh gọi ý định nhấn của thông báo phải trỏ đến hoạt động luôn bật của bạn, như minh hoạ trong đoạn mã sau:

// 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()
)

Sửa đổi giao diện hình ảnh ở chế độ môi trường xung quanh

Theo mặc định, khi triển khai chế độ luôn bật, màn hình sẽ không thay đổi khi đồng hồ chuyển sang chế độ môi trường xung quanh. Bạn có thể sửa đổi hành vi này bằng cách ghi đè các phương thức trong AmbientLifecycleCallback.

Để tiết kiệm pin, hãy làm như sau:

  • Phát sáng ít điểm ảnh hơn và để phần lớn màn hình màu đen. Hãy cân nhắc chỉ hiển thị thông tin quan trọng ở chế độ môi trường xung quanh và cung cấp thêm thông tin chi tiết khi người dùng chuyển sang chế độ tương tác.
  • Điều chỉnh mọi nội dung để nhận được các bản cập nhật nhưng ít thường xuyên hơn. Ví dụ: hiện đồng hồ hẹn giờ ở phút gần nhất thay vì giây gần nhất.
  • Trong AmbientDetails đối tượng được truyền đến onEnterAmbient():
    • Nếu bạn đặt deviceHasLowBitAmbient, hãy tắt tính năng khử răng cưa khi có thể.
    • Nếu bạn đặt burnInProtectionRequired, hãy chuyển hình ảnh trực quan xung quanh theo định kỳ và tránh các vùng màu trắng đồng nhất.

Khi sử dụng Compose cho Wear OS, bạn nên sử dụng các phương thức gọi lại này để cập nhật trạng thái, để hệ thống có thể kết hợp lại giao diện người dùng của bạn một cách phù hợp.

Để biết ví dụ về cách đạt được điều này, hãy xem Mẫu bài tập thể dục trên GitHub, sử dụng AmbientAware thành phần kết hợp từ thư viện Horologist.