Pada kacamata pintar audio, sistem mengarahkan input fisik (seperti gestur touchpad atau penekanan tombol) berdasarkan kesadaran pengguna, bukan fokus tampilan visual. Karena pengguna tidak dapat melihat antarmuka pengguna, sistem akan mengarahkan input fisik ke aktivitas yang diproyeksikan dari pengalaman aplikasi apa pun yang dirasakan atau berinteraksi secara aktif dengan pengguna.
Cara sistem menentukan kesadaran pengguna
Sistem menentukan kesadaran pengguna dengan memantau aliran data berikut yang aktif:
- Streaming output audio: Pembacaan suara, isyarat audio, atau pemutaran media.
- Streaming rekaman mikrofon: Perintah suara atau perekaman audio yang sedang berlangsung dari lingkungan sekitar pengguna.
- Streaming pengambilan gambar kamera: Streaming video atau foto.
Beberapa aliran data bersifat sementara dan hanya menarik perhatian pengguna dalam waktu singkat. Misalnya, pembacaan audio belokan berikutnya yang harus diambil pengguna saat menavigasi rute. Aliran data lainnya tidak terbatas dan mempertahankan kesadaran pengguna selama aliran data tersebut berlanjut. Misalnya, pemutaran media dengan playlist acak tanpa akhir. Saat aliran data sementara mengganggu aliran data yang tidak terbatas, aliran data tersebut akan mendapatkan perhatian pengguna untuk sementara.
Konkurensi dan fokus input
Pengguna sering menjalankan beberapa pengalaman aplikasi secara bersamaan di kacamata pintar audio. Misalnya, pengguna mungkin mendengarkan musik sambil mengikuti navigasi belokan demi belokan. Dalam kasus ini, sistem menetapkan status serentak dan mengalihkan fokus input agar sesuai dengan fokus audio dengan melakukan hal-hal berikut:
- Melanjutkan atau menghentikan aktivitas yang diproyeksikan aplikasi Anda.
- Merutekan input fisik ke aktivitas yang diproyeksikan di latar depan.
Pendekatan ini membantu mempertahankan pengalaman pengguna yang konsisten.
Membiarkan sistem meluncurkan kembali aktivitas yang diproyeksikan
Saat aplikasi Anda mendapatkan perhatian pengguna, terutama jika aktivitas yang diproyeksikan berada di latar belakang, sistem harus dapat melanjutkan aktivitas dan mengarahkan input fisik ke aplikasi tersebut.
Untuk memastikan sistem dapat meluncurkan kembali aktivitas Anda:
Buat intent tertunda: Buat
Intenteksplisit yang mengarah ke aktivitas yang diproyeksikan target Anda. Gabungkan intent dalamPendingIntentdan tetapkanFLAG_UPDATE_CURRENTatauFLAG_IMMUTABLEuntuk mempertahankan perilaku peluncuran yang aman dan dapat diprediksi:// Build an explicit Intent pointing to this projected activity and wrap it in a // PendingIntent so the system can relaunch it and route physical input to it. private val pendingIntent: PendingIntent by lazy { val intent = Intent(this, ProjectedInputFocusActivity::class.java) PendingIntent.getActivity( this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) }
Daftarkan penerima input: Dapatkan instance
ProjectedActivityCompatdan daftarkanPendingIntentAnda sebagai penerima input yang ditetapkan dengan meneruskannya kesetActivityAsInputReceiver.override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) lifecycleScope.launch { // Create or obtain the ProjectedActivityCompat instance val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity) // Register the PendingIntent as the designated input receiver projectedActivity.setActivityAsInputReceiver(pendingIntent) }
Hapus penerima input saat pembersihan: Saat aktivitas Anda dihancurkan atau tidak perlu lagi menerima input fisik, hapus penerima input untuk mencegah pengiriman
PendingIntentyang sudah tidak berlaku dan menghindari kebocoran memori.override fun onDestroy() { super.onDestroy() lifecycleScope.launch { val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity) projectedActivity.clearActivityAsInputReceiver() } }
Memahami cara fokus input beralih di berbagai status serentak
Untuk menentukan aplikasi mana yang menerima fokus input, sistem mengevaluasi aliran data aktif dan mengarahkan input berdasarkan status serentak berikut:
| Status konkurensi | Konteks lingkungan | Perilaku sistem dan fokus input | Contoh |
|---|---|---|---|
Non-serentak |
Aktivitas proyeksi mandiri aktif; tidak ada sesi media latar belakang yang berjalan. |
Fokus input sepenuhnya diarahkan ke aktivitas yang diproyeksikan, bahkan selama periode senyap di antara pembacaan. |
Pengguna menjalankan aplikasi pelacakan olahraga. Bahkan selama momen hening, input touchpad dirutekan langsung ke aplikasi kebugaran. |
Semi-serentak |
Aktivitas yang diproyeksikan aktif, tetapi sesi media latar belakang ada dalam status dijeda. |
Fokus input ditetapkan secara default ke kontrol media yang dijeda selama periode senyap di antara pembacaan aktif aplikasi. |
Pengguna menjalankan aplikasi pelacakan olahraga saat musik dijeda. Di antara info terbaru pelatih kebugaran, ketukan touchpad akan melanjutkan musik, bukan memicu fungsi olahraga. |
Serentak |
Pemutaran ganda aktif (misalnya, pengumuman audio aplikasi Anda menginterupsi atau mengecilkan musik latar belakang). |
Fokus audio sama dengan fokus input. Fokus input akan diarahkan ke aktivitas yang diproyeksikan selama pembacaan aktif dan kembali ke kontrol media saat streaming audio berakhir. |
Pengguna mendengarkan musik saat aplikasi navigasi mengaktifkan pembacaan petunjuk. Selama pembacaan, aplikasi navigasi mendapatkan fokus input. Setelah pembacaan selesai, fokus input akan beralih kembali ke kontrol media. |
Pengamanan pengaturan waktu sistem
Sistem ini memberikan pengamanan berikut untuk membantu mencegah input yang tidak disengaja atau perilaku yang tidak terduga bagi pengguna:
- Masa tenggang untuk aktivitas yang diproyeksikan yang baru diluncurkan: Untuk mengakomodasi pemuatan aset cold-start atau penundaan jaringan, aktivitas yang diproyeksikan yang baru diluncurkan akan menerima masa tenggang singkat untuk membuat aliran data dan mendapatkan perhatian pengguna sebelum sistem menghentikan aktivitas yang diproyeksikan dan memindahkannya ke latar belakang.
- Fokus dialihkan berdasarkan kesadaran pengguna: Jika kesadaran pengguna berubah dari aliran data baru yang aktif seperti pembacaan audio, sistem akan langsung melanjutkan aktivitas yang diproyeksikan dan mengalihkan fokus input ke aktivitas tersebut.
- Buffer transisi selama pemutaran media: Saat pembacaan sementara selesai selama pemutaran media di latar belakang, fokus input tetap berada pada aktivitas yang diproyeksikan untuk sementara. Periode buffering membantu mencegah input yang tidak disengaja, seperti pengguna yang mencoba membisukan pembacaan, tetapi malah melewati trek musik. Setelah buffering transisi, sistem akan menghentikan aktivitas yang diproyeksikan aplikasi dan mengarahkan fokus input ke kontrol media.
- Aktivitas yang diproyeksikan dalam status tidak ada aktivitas akan dihentikan atau dijeda: Sistem akan menghentikan aktivitas yang diproyeksikan dalam status tidak ada aktivitas tanpa streaming data aktif setelah beberapa menit (atau sesaat untuk output media yang sedang berlangsung saat dijeda).
Transisi fokus input dalam praktik
Untuk memahami cara transisi fokus input di seluruh status serentak, pertimbangkan contoh skenario berikut untuk aplikasi navigasi yang memberikan panduan belokan demi belokan:
Skenario A: Tidak serentak (media tidak aktif)
Untuk skenario ini, sistem mengarahkan input ke aplikasi navigasi, yang memiliki awareness pengguna selama seluruh perjalanan.
- Pengguna meluncurkan navigasi tanpa memutar musik latar.
- Aplikasi navigasi meluncurkan aktivitas yang diproyeksikan di kacamata pintar audio.
- Karena tidak ada sesi media yang aktif, aplikasi navigasi mempertahankan fokus input touchpad selama perjalanan.
- Tindakan pengguna: Mengetuk selama pembacaan aktif dapat membisukan panduan. Mengetuk selama tidak ada suara dapat mengulangi petunjuk terakhir.
Skenario B: Semi-serentak (media dijeda)
Untuk skenario ini, sistem akan mengarahkan input ke kontrol media sistem setiap kali aplikasi navigasi tidak memiliki kesadaran pengguna.
- Pengguna meluncurkan navigasi saat musik latar dijeda.
- Selama periode senyap di antara pembacaan, fokus input ditetapkan secara default ke kontrol media.
- Saat aplikasi navigasi mengucapkan "Dalam jarak 150 meter, belok kiri", aplikasi tersebut akan mendapatkan fokus input.
- Tindakan pengguna: Mengetuk selama pembacaan dapat membisukan panduan. Mengetuk selama senyap akan melanjutkan pemutaran musik.
Skenario C: Serentak (media aktif)
Untuk skenario ini, sistem akan mengarahkan input ke kontrol media sistem setiap kali aplikasi navigasi tidak memiliki kesadaran pengguna, dan audio dari pemutaran media yang aktif akan dikecilkan selama setiap pembacaan dari aplikasi navigasi.
- Pengguna meluncurkan navigasi saat musik sedang diputar.
- Selama pembacaan petunjuk, sistem akan mengecilkan audio latar belakang dan mengalihkan fokus input ke aplikasi navigasi.
- Tindakan pengguna: Mengetuk selama pembacaan dapat membisukan panduan. Mengetuk selama periode senyap akan mengontrol pemutaran media (untuk menjeda atau melanjutkan).