Aplikasi yang selalu aktif dan mode standby sistem

Wear OS otomatis menangani peralihan ke mode daya rendah untuk aplikasi yang aktif saat pengguna tidak lagi menggunakan smartwatch. Hal ini disebut mode standby sistem. Aplikasi dilanjutkan setelah pengguna berinteraksi dengan smartwatch jika salah satu kondisi berikut terpenuhi:

Untuk kasus penggunaan tertentu—misalnya, pengguna yang ingin melihat detak jantung dan kecepatan selama berlari—Anda juga dapat mengontrol apa yang ditampilkan dalam mode standby sistem. Aplikasi Wear OS yang berjalan dalam mode interaktif dan mode standby disebut aplikasi yang selalu aktif.

Membuat aplikasi terus terlihat akan memengaruhi masa pakai baterai, jadi pertimbangkan dampak tersebut saat menambahkan fitur ini ke aplikasi Anda.

Mengonfigurasi project

Untuk mendukung mode standby, ikuti langkah-langkah berikut:

  1. Buat atau update project Anda berdasarkan konfigurasi pada halaman Membuat dan menjalankan aplikasi wearable.
  2. (Hanya diperlukan di Wear OS 4 atau yang lebih lama) Tambahkan izin WAKE_LOCK ke file manifes Android:
<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="33"/>

Mengaktifkan mode selalu aktif

Mulai Wear OS 6, aplikasi dengan targetSdkVersion yang disetel ke 36 atau lebih tinggi akan selalu aktif secara default. Aplikasi ini tetap terlihat selama mode standby sistem selama jangka waktu terbatas tanpa konfigurasi apa pun. Jika targetSdkVersion aplikasi Anda lebih rendah dari 36, atau jika aplikasi Anda perlu berjalan di Wear OS 5 atau yang lebih rendah, gunakan class AmbientLifecycleObserver untuk membuat aplikasi Anda selalu aktif.

Bereaksi terhadap peristiwa mode standby menggunakan class AmbientLifecycleObserver

Aplikasi juga dapat menggunakan class AmbientLifecycleObserver untuk bereaksi langsung terhadap peristiwa mode standby:

  1. Terapkan antarmuka AmbientLifecycleObserver.AmbientLifecycleCallback, seperti dalam contoh berikut. Pada tahap ini, metode akan kosong, tetapi selanjutnya panduan ini akan memberikan detail perubahan apa saja yang harus dilakukan untuk membuat visualisasi masuk dan keluar dari mode standby.

    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. Buat AmbientLifecycleObserver dan daftarkan observer. Biasanya, langkah ini akan digunakan di onCreate() atau composable tingkat atas jika menggunakan Compose untuk Wear OS, agar perilaku selalu aktif diaktifkan selama siklus proses aktivitas.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
  3. Hapus observer dengan memanggil removeObserver(), jika perilaku selalu aktif tidak lagi diperlukan. Misalnya, Anda dapat memanggil metode ini dalam metode onDestroy() aktivitas Anda.

Memperbarui teks waktu menggunakan widget TimeText

Mulai Wear OS 6, widget TimeText mendukung mode standby. Jika aplikasi hanya perlu memperbarui teks waktu setiap menit selama mode standby, Anda cukup menggunakan widget TimeText tanpa menggunakan AmbientLifecycleObserver.

Aplikasi always-on dapat beralih ke latar belakang

Mulai Wear OS 5, sistem akan memindahkan aplikasi yang selalu aktif ke latar belakang setelah aplikasi terlihat dalam mode standby selama jangka waktu tertentu. Pengguna dapat mengonfigurasi waktu tunggu di setelan sistem.

Jika aplikasi yang selalu aktif menampilkan informasi tentang tugas pengguna yang sedang berlangsung—seperti pemutaran musik atau sesi olahraga—Anda mungkin ingin aktivitas yang sedang berlangsung tetap terlihat hingga tugas berakhir. Untuk melakukannya, gunakan Ongoing Activity API untuk memposting notifikasi berkelanjutan yang ditautkan ke aktivitas selalu aktif Anda.

Agar sistem dapat mengenali aktivitas yang sedang berlangsung, intent sentuh notifikasi yang sedang berlangsung harus mengarah ke aktivitas yang selalu aktif, seperti yang ditunjukkan dalam cuplikan kode berikut:

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

Mengubah pengalaman pengguna dalam mode standby

Secara default, saat mengimplementasikan mode selalu aktif, layar tidak akan mengubah tampilannya saat smartwatch masuk ke mode standby. Anda dapat mengubah perilaku ini dengan mengganti metode di AmbientLifecycleCallback.

Untuk membantu menghemat daya, lakukan hal berikut:

  • Terangi lebih sedikit piksel. Sebaiknya hanya tampilkan informasi penting dalam mode standby, dan berikan detail selengkapnya saat pengguna masuk ke mode interaktif.
  • Biarkan setidaknya 85% layar berwarna hitam, hapus isi, dan gunakan garis batas untuk tombol dan ikon besar.
  • Hindari menampilkan informasi yang tidak relevan, seperti branding dan gambar latar belakang yang tidak berfungsi.
  • Pastikan elemen berada di posisi yang sama di seluruh mode aktif dan selalu aktif, dan selalu tampilkan waktu.
  • Sesuaikan konten untuk update yang lebih jarang. Misalnya, tampilkan timer ke menit terdekat, bukan detik terdekat.
  • Hapus atau tampilkan UI placeholder untuk konten alfanumerik yang sering diperbarui, seperti jarak atau waktu.
  • Hapus indikator progres yang sering diperbarui, seperti untuk cincin hitung mundur dan sesi media.
  • Saat memasuki mode selalu aktif, jika pengguna sebelumnya berada di layar konfigurasi atau setelan di aplikasi Anda, sebaiknya tampilkan layar yang lebih relevan di aplikasi Anda.
  • Dalam objek AmbientDetails yang diteruskan ke onEnterAmbient():
    • Jika deviceHasLowBitAmbient disetel, nonaktifkan anti-aliasing jika memungkinkan.
    • Jika burnInProtectionRequired disetel, ubah visualisasi secara berkala, dan hindari area putih yang menyala terus.
  • Hindari menjalankan animasi berkelanjutan selama mode standby. Mulai Wear OS 5.1, animator mungkin berhenti berjalan selama mode standby.

Checklist untuk tampilan tanpa gangguan

Mungkin ada situasi saat Anda menginginkan kontrol maksimum atas tampilan saat perangkat berpindah ke berbagai status, misalnya saat aplikasi olahraga ingin menghindari tampilan jam muncul di layar selama olahraga. Dalam kasus ini, lakukan hal berikut:

  1. Implementasikan antarmuka AmbientLifecycleObserver.AmbientLifecycleCallback.
  2. Buat tata letak baru dengan daya rendah untuk digunakan saat perangkat dalam mode standby sistem.
  3. Selama durasi olahraga, terapkan aktivitas yang sedang berlangsung.

Untuk contoh cara melakukannya, lihat contoh Olahraga berbasis compose di GitHub, yang menggunakan composable AmbientAware dari library Horologist.