Ứ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ý thao tá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 thời gian sử dụng đồng hồ lâu hơn. Đâ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 với đồng hồ trở lại trong một khung thời gian nhất định, Wear OS đưa người dùng quay lại ứng dụng mà họ đã dừng lại.

Đố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 trên cấu hình trên Tạo và chạy trang ứ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 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 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 chế độ luôn bật hành vi cụ thể là không 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 của bạn.

Các ứng dụng luôn bật có thể chuyển sang chạy ở 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 chú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 nhiệm vụ đang diễn ra của người dùng, chẳng hạn như phát nhạc hoặc buổi tập thể dục. Bạn nên duy trì hoạt động đang diễn ra hiển thị 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 chế độ 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. Cân nhắc chỉ hiện thông tin quan trọng ở chế độ môi trường xung quanh và cung cấp thêm chi tiết khi người dùng vào 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ờ thành 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 di chuyển hình ảnh trực quan xung quanh định kỳ và tránh các vùng màu trắng đồng nhất.

Khi dùng Compose cho Wear OS, bạn nên dùng các phương thức gọi lại sau đây cập nhật trạng thái, cho phép hệ thống kết hợp lại Giao diện người dùng 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.