Mulai Android 17, framework audio menerapkan batasan pada interaksi audio di latar belakang, termasuk pemutaran audio, permintaan fokus audio, dan API perubahan volume untuk memastikan bahwa perubahan ini dimulai secara sengaja oleh pengguna.
Jika developer aplikasi bermaksud mengontrol audio tanpa aktivitas yang terlihat, mereka
harus memastikan bahwa aplikasi memiliki layanan latar depan (yang bukan jenis
SHORT_SERVICE) yang dimulai dengan kemampuan saat digunakan (WIU). Layanan
latar depan diberi kemampuan WIU jika dimulai sebagai respons terhadap
MediaSessionEvent atau saat aplikasi terlihat oleh pengguna.
Jika aplikasi mencoba memanggil API audio saat aplikasi tidak dalam siklus proses yang valid,
API pemutaran audio dan perubahan volume akan gagal tanpa menampilkan
pengecualian atau memberikan pesan kegagalan. API fokus audio gagal dengan
kode hasil AUDIOFOCUS_REQUEST_FAILED.
Tujuan memperkenalkan batasan ini adalah untuk mengurangi pengalaman audio latar belakang yang tidak disengaja dan penuh bug. Contohnya antara lain:
- Aplikasi yang memutar audio tanpa layanan latar depan dapat dibekukan. Saat aplikasi akhirnya dibuka, aplikasi akan melanjutkan pemutaran audio secara tidak terduga, bahkan beberapa jam kemudian.
- Aplikasi yang memutar audio tanpa layanan latar depan menghadapi berbagai batasan run yang menghasilkan performa audio yang terputus-putus.
- Pemutaran terlepas dari siklus proses aktivitas, yang dapat mengakibatkan sesi pemutaran yang bocor atau peristiwa fokus yang bocor yang berlanjut tanpa cara bagi pengguna untuk menghentikan pemutaran.
Kami mendorong developer untuk menguji aplikasi mereka dan memberikan masukan terkait perubahan perilaku jika ada kasus penggunaan audio yang disengaja dan berdampak negatif. Laporkan masalah apa pun menggunakan pelacak masalah kompatibilitas aplikasi Android 17 ini.
Mengidentifikasi kasus penggunaan audio latar belakang yang terpengaruh
Periksa penerapan pemutaran audio Anda dan identifikasi apakah aplikasi Anda bermaksud menyediakan fungsi interaksi audio di latar belakang bahkan dalam keadaan bersyarat.
Jika aplikasi Anda hanya bermaksud memutar audio atau menggunakan API audio saat menampilkan aktivitas yang terlihat oleh pengguna, termasuk menggunakan mode Picture in Picture (PiP), maka aplikasi tersebut tidak terpengaruh oleh perubahan ini.
Jika aplikasi Anda menyediakan fungsi VOIP, termasuk aplikasi panggilan video, maka aplikasi tersebut harus sudah memenuhi persyaratan yang diperkenalkan untuk pemutaran (biasanya melalui penggunaan API telekomunikasi yang direkomendasikan) agar berhasil merekam audio, dan oleh karena itu, kemungkinan tidak akan terpengaruh.
Jika aplikasi Anda bermaksud melanjutkan pemutaran audio saat layar nonaktif atau saat pengguna telah menutup sepenuhnya aktivitas Anda, yang paling sering terlihat di aplikasi streaming musik atau aplikasi podcast, maka aplikasi Anda dianggap menyediakan fungsi audio latar belakang dan harus memenuhi persyaratan baru.
Skenario audio latar belakang yang kemungkinan akan terpengaruh
Jika aplikasi Anda tidak mengikuti model untuk melanjutkan interaksi audio yang dimulai saat aplikasi Anda terbuka, atau sebagai respons terhadap pemicu pengguna yang eksplisit, kemungkinan fungsi aplikasi Anda akan dibatalkan secara diam-diam.
Misalnya, jika aplikasi Anda memulai layanan latar depan sebagai respons terhadap
BOOT_COMPLETE dan mencoba berinteraksi dengan audio, layanan tersebut akan dibatalkan.
Praktik terbaik audio latar belakang untuk mengurangi dampak
Gunakan komponen
MediaSessionServicelibrary Jetpack media3 untuk mengelola pemutaran audio di latar belakang.Jika Anda melakukannya, aplikasi Anda kemungkinan tidak akan terpengaruh oleh penguatan keamanan di latar belakang karena library membantu mengelola siklus proses pemutaran.
Jika tidak menggunakan library media3, Anda harus memulai FGS
mediaPlaybacksecara manual. Selalu mulai layanan latar depan saat aplikasi berada di latar depan jika audio latar belakang dapat terjadi.Misalnya, jika aplikasi Anda adalah aplikasi streaming video yang biasanya hanya berjalan di latar depan, tetapi berisi kemampuan yang memungkinkan pengguna melanjutkan pemutaran saat layar mati, maka saat pemicu pemutaran yang dimulai pengguna terjadi, aplikasi Anda tetap harus memulai layanan latar depan.
Tindakan ini memastikan bahwa layanan latar depan dimulai dengan kemampuan WIU.
Aktifkan
mediaPlaybackFGS selama kegagalan sementara kurang dari 10 menit.Jika aplikasi Anda mengalami kegagalan sementara, seperti masalah buffering karena aktivitas jaringan, atau ada gangguan sementara yang diharapkan seperti
AUDIOFOCUS_LOSS_TRANSIENT, maksud untuk memutar harus dilanjutkan. Oleh karena itu, FGS Anda harus tetap aktif.Hentikan layanan latar depan di akhir pemutaran dan mulai ulang pemutaran hanya jika pengguna secara eksplisit melanjutkan pemutaran.
Jika ada sinyal permanen untuk mengakhiri pemutaran (misalnya, konten selesai tanpa pemutaran otomatis,
AUDIOFOCUS_LOSS, peristiwa jeda dari UMO, atau peristiwa tombol media) atau kegagalan yang tidak dapat dipulihkan, aplikasi Anda harus menghentikan interaksi audio, menghentikan layanan latar depan, dan mengakhiri sesi media. Melakukan semua hal ini sesuai dengan konsepsi pengguna tentang "menyelesaikan" interaksi audio latar belakang yang diinginkan. Setelah melakukannya, aplikasi Anda tidak lagi memiliki kemampuan interaksi audio di latar belakang.Selanjutnya, jika pengguna secara eksplisit melanjutkan pemutaran, misalnya melalui UI aplikasi Anda atau melalui tombol putar Universal Media Object, maksud untuk memulai pemutaran audio akan kembali, sehingga menghasilkan FGS yang baru dimulai.
Uji perilaku pemutaran audio dengan perintah shell adb.
Menguji perubahan di Android 16 dan Android 17
Fitur ini sudah diterapkan di tingkat "peringatan" mulai dari Android 16 dan seterusnya. Artinya, aplikasi dapat menggunakan adb shell cmd audio
set-enable-hardening untuk menguji secara manual penegakan penguatan audio latar belakang.
Untuk mengaktifkan penegakan kebijakan pada perangkat yang menjalankan Android 16, jalankan perintah berikut:
adb shell cmd audio set-enable-hardening 1
Untuk menonaktifkan penegakan kebijakan di perangkat yang menjalankan Android 17, jalankan perintah berikut:
adb shell cmd audio set-enable-hardening 0
Sebaiknya gunakan logcat atau perintah adb adb dumpsys audio untuk mengidentifikasi apakah aplikasi mengalami kegagalan senyap karena penerapan penguatan audio. Jika ya, log akan memiliki entri yang diawali dengan AudioHardening dengan nama paket Anda.
Memahami FGS dengan kemampuan saat digunakan
Secara umum, layanan latar depan (FGS) harus diluncurkan saat aplikasi berada di latar depan untuk memperpanjang operasi yang dimulai pengguna. Dalam beberapa kasus tertentu, aplikasi diizinkan untuk meluncurkan layanan latar depan saat aplikasi berada di latar belakang. Namun, layanan latar depan ini biasanya tidak diberi kemampuan Saat-Sedang-Digunakan (WIU).
WIU bertindak sebagai gerbang keamanan–WIU mencegah FGS yang dimulai dari latar belakang melakukan perilaku sensitif tertentu saat pengguna mungkin tidak menyadari aktivitas aplikasi. Hal ini mencegah aplikasi mengakses data sensitif seperti lokasi, kamera, atau mikrofon, dan mulai Android 17, hal ini juga memblokir API audio yang biasanya memerlukan konteks UI yang terlihat.
Berikut referensi praktisnya:
- FGS Standar: Layanan yang dimulai saat aplikasi terlihat atau diberi kemampuan peluncuran aktivitas latar belakang diberi akses WIU.
- FGS yang Dimulai di Latar Belakang (BFSL): Sebagian besar tidak memberikan akses WIU. Pengecualian utama yang memberikan WIU adalah interaksi yang melibatkan niat eksplisit pengguna, misalnya, klik notifikasi, interaksi widget, atau peristiwa tombol media dari perangkat eksternal.
- FGS yang dimulai sistem: FGS yang dimulai menggunakan delegasi system-server (misalnya, dengan menggunakan library jetpack Telecom) diberi akses WIU.
Baca selengkapnya di Pembatasan untuk memulai layanan latar depan dari latar belakang.
Daftar lengkap API Audio yang terpengaruh
Fungsi audio |
Hasil |
API yang terpengaruh |
Pemutaran audio |
Pemutaran disenyapkan Tidak ada pengecualian, tidak ada pesan kegagalan yang diberikan oleh API mana pun |
(NDK) Library media sisi klien yang mengelola pemutaran seperti media3, Exoplayer, dan Oboe juga dapat terpengaruh. |
Permintaan fokus audio |
Menampilkan Tidak memengaruhi pemutaran audio aplikasi lain, tidak ada fokus yang diperoleh |
|
API mode volume dan dering |
Tidak ada efek pada mode atau volume dering (panggilan metode diabaikan secara diam-diam) Tidak ada pengecualian, tidak ada pesan kegagalan yang diberikan oleh API mana pun |
|