Sebelum memulai streaming logis, aplikasi meminta fokus audio menggunakan audio seperti yang digunakan untuk streaming logis. Aplikasi harus mengikuti fokus kerugian performa yang diharapkan dalam kasus penggunaan otomotif.
Saat mengirim permintaan fokus, direkomendasikan, hal itu tidak diberlakukan oleh sistem. Oleh karena itu, pertimbangkan fokus sebagai sarana untuk secara tidak langsung mengontrol dan menghindari konflik selama pemutaran, bukan sebagai mekanisme kontrol audio utama. Kendaraan sebaiknya tidak bergantung pada sistem fokus untuk pengoperasian subsistem audio.
Memfokuskan interaksi
Untuk mendukung AAOS, permintaan fokus audio ditangani berdasarkan
interaksi antara CarAudioContext
permintaan dan interaksi saat ini
pemegang fokus. Ada tiga jenis interaksi:
- Eksklusif
- Tolak
- Concurrent
Interaksi eksklusif
Ini adalah model interaksi yang paling umum digunakan dengan Android.
Dalam interaksi eksklusif, hanya satu aplikasi yang diizinkan untuk mempertahankan fokus pada satu waktu.
Oleh karena itu, permintaan fokus yang masuk akan diberikan fokus, sementara fokus yang ada
kehilangan fokus. Karena kedua aplikasi memutar media, hanya satu aplikasi yang diizinkan untuk menyimpan
fokus. Akibatnya, permintaan fokus aplikasi yang baru dimulai akan ditampilkan dengan
AUDIOFOCUS_REQUEST_GRANTED
saat aplikasi yang sedang memutar musik menerima
peristiwa perubahan fokus dengan status kerugian yang sesuai dengan jenis permintaan
apa yang telah Anda lakukan.
Tolak interaksi
Dengan interaksi tolak, permintaan masuk akan selalu ditolak. Sebagai
misalnya, saat mencoba memutar musik
ketika panggilan sedang berlangsung. Di sini
ini, jika Telepon menahan fokus audio untuk sebuah panggilan dan aplikasi kedua meminta fokus
untuk memutar musik, aplikasi musik menerima AUDIOFOCUS_REQUEST_FAILED
sebagai respons
terhadap permintaan. Karena permintaan fokus ditolak, tidak ada kehilangan fokus yang akan dikirim
ke holder fokus saat ini.
Interaksi serentak
Keunikan AAOS adalah interaksi serentak. Tindakan ini memberi aplikasi yang meminta audio fokus pada mobil, yaitu kemampuan untuk menyimpan fokus secara bersamaan dengan aplikasi lain. Untuk terjadi interaksi serentak, kondisi berikut harus dipenuhi. Versi:
Permintaan fokus masuk harus meminta AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
Pemegang fokus saat ini tidak setPauseWhenDucked(true)
Pemegang fokus saat ini memilih untuk tidak menerima acara bebek
Jika kriteria ini terpenuhi, permintaan fokus akan ditampilkan dengan
AUDIOFOCUS_REQUEST_GRANTED
sementara pemegang fokus saat ini tidak memiliki perubahan
fokus. Namun, jika pemegang fokus saat ini memilih untuk menerima peristiwa bebek atau
berhenti saat diperkecil, pemegang fokus saat ini kehilangan fokus, seperti yang terjadi dengan
interaksi eksklusif.
Menangani streaming serentak
Meskipun interaksi serentak memiliki banyak kegunaan, berhati-hatilah dalam mencampur dan
pengecilan volume pada tingkat
perangkat keras di seluruh perangkat {i>output<i}. Kami sangat menyarankan
CarAudioContext
yang diizinkan untuk diputar secara serentak harus dirutekan ke
perangkat output yang berbeda.
Dengan memiliki perangkat output terpisah untuk streaming serentak, hal ini memungkinkan HAL untuk mengecilkan salah satu aliran sebelum mencampurnya, atau untuk mengarahkan aliran fisik ke speaker yang berbeda di dalam kendaraan. Jika aliran data logis dicampur dalam Di Android, keuntungan tidak diubah dan dikirimkan sebagai bagian dari aliran fisik yang sama.
Misalnya, ketika navigasi dan media disampaikan secara bersamaan, untuk streaming media tersebut dapat dikurangi sementara (atau, diperkecil) sehingga instruksi navigasi dapat didengar dengan lebih jelas. Atau, navigasi streaming dapat dirutekan ke speaker sisi pengemudi saat media diputar di seluruh kabin.
Matriks interaksi
Tabel di bawah menunjukkan matriks interaksi seperti yang ditentukan oleh CarAudioService
.
Setiap baris mewakili CarAudioContext
pemegang fokus saat ini dan masing-masing
mewakili permintaan masuk.
Misalnya, saat aplikasi media musik memegang fokus sebagai permintaan aplikasi navigasi fokus, matriks menunjukkan bahwa kedua interaksi dapat dimainkan secara bersamaan, dengan mengasumsikan kriteria lain untuk interaksi serentak akan terpenuhi.
Karena interaksi serentak, pengguna bisa memiliki lebih dari satu holder fokus. Dalam hal ini, permintaan fokus yang masuk dibandingkan dengan masing-masing pemegang fokus saat ini sebelum menentukan interaksi apa yang akan diterapkan. Di sini maka interaksi yang paling konservatif akan menang. Tolak, lalu eksklusif, dan akhirnya serentak.
Gambar 1. Matriks interaksi fokus audio.
Navigasi selama panggilan telepon
Di Android 11, setelan pengguna baru diperkenalkan untuk memungkinkan pengguna mengubah
perilaku interaksi antara navigasi
dan panggilan telepon. Bila telah ditetapkan,
android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL
mengubah
interaksi antara permintaan fokus NAVIGATION
yang masuk dan CALL
saat ini
holder fokus dari serentak hingga ditolak. Jika pengguna lebih menyukai
petunjuk navigasi tidak mengganggu panggilan, mereka dapat mengaktifkan setelan. Ini
dipertahankan untuk pengguna, dan dapat diatur
secara dinamis sehingga fokus selanjutnya
permintaan tersebut mengikuti setelan baru.
Fokus audio dapat ditunda
Di Android 11, AAOS menambahkan dukungan untuk meminta fokus audio yang dapat tertunda. Ini memungkinkan permintaan fokus non-sementara tertunda ketika interaksi mereka dengan pemegang fokus saat ini biasanya akan menyebabkan mereka ditolak. Setelah perubahan fokus menghasilkan keadaan di mana permintaan yang tertunda bisa mendapatkan fokus, permintaan tersebut disetujui.
Aturan untuk permintaan fokus audio yang tertunda
Hanya permintaan non-sementara. Permintaan tertunda hanya dapat dibuat untuk sumber non-sementara untuk menghindari pemutaran suara sementara setelah menjadi relevan.
Hanya satu permintaan yang dapat ditunda dalam satu waktu. Jika permintaan yang dapat ditunda dibuat saat sudah ada permintaan tertunda, permintaan asli yang tertunda menerima peristiwa perubahan
AUDIOFOCUS_LOSS
, dan permintaan baru menerima respons sinkron dariAUDIOFOCUS_REQUEST_DELAYED
.Permintaan yang dapat ditunda harus memiliki
OnAudioFocusChangeListener
Setelah tertunda, pemroses digunakan untuk memberi tahu pemohon saat permintaan akhirnya akan disetujui (AUDIOFOCUS_GAIN
), atau jika nantinya ditolak (AUDIOFOCUS_LOSS
).
Minta fokus yang dapat ditunda
Untuk membuat permintaan yang dapat tertunda:
Gunakan
AudioFocusRequest.Builder#setAcceptsDelayedFocusGain
.mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener(); mDelayedFocusRequest = new AudioFocusRequest .Builder(AudioManager.AUDIOFOCUS_GAIN) .setAudioAttributes(mMusicAudioAttrib) .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener) .setForceDucking(false) .setWillPauseWhenDucked(false) .setAcceptsDelayedFocusGain(true) .build();
Saat membuat permintaan, tangani respons
AUDIOFOCUS_REQUEST_DELAYED
:int delayedFocusRequestResults = mAudioManager.requestAudioFocus(mDelayedFocusRequest); if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { // start audio playback return; } if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) { // audio playback delayed to audio focus listener return; }
Saat permintaan tertunda, pemroses fokus akan menangani perubahan fokus:
private final class MediaWithDelayedFocusListener implements OnAudioFocusChangeListener { @Override public void onAudioFocusChange(int focusChange) { synchronized (mLock) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: … // Start focus playback case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: … // Pause media transiently case AudioManager.AUDIOFOCUS_LOSS: … // Stop media
Pengelolaan fokus multi-zona
Untuk kendaraan dengan beberapa zona audio, fokus audio dikelola secara terpisah untuk setiap zona. Dengan demikian, permintaan ke satu zona tidak mempertimbangkan apa yang menyimpan fokus di zona lain, juga tidak menyebabkan holder fokus di zona lain kehilangan fokus. Dengan fitur ini, fokus kabin utama dapat dikelola secara terpisah dari sistem hiburan di kursi belakang, sehingga tidak mengganggu pemutaran audio di satu zona dengan perubahan fokus ke zona lainnya.
Untuk semua aplikasi, CarAudioService
akan otomatis mengelola fokus. Fokus
zona audio permintaan ditentukan oleh UserId
atau UID
yang terkait
(untuk mengetahui detailnya, lihat Pemilihan Rute Audio).
Meminta audio dari beberapa zona secara serentak
Jika ingin memutar audio di beberapa zona secara serentak, aplikasi harus meminta
untuk setiap zona dengan menyertakan AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
dalam
paket:
//Create attribute with bundle and AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
Bundle bundle = new Bundle();
bundle.putInt(CarAudioManager.AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID,
zoneId);
AudioAttributes attributesWithZone = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.addBundle(bundle)
.build();
//Create focus request using built attributesWithZone
Parameter paket ini memungkinkan pemohon mengganti zona audio otomatis pemetaan untuk menggunakan ID zona yang ditentukan. Oleh karena itu, aplikasi dapat mengeluarkan permintaan terpisah untuk zona audio yang berbeda.
Fokus audio HAL
Mulai Android 11, HAL diaktifkan untuk meminta fokus atas nama aliran data eksternal. Meskipun opsional, penggunaan API ini sangat dianjurkan untuk memungkinkan suara eksternal menjadi peserta yang optimal dalam ekosistem Android dan untuk memberikan pengalaman pengguna yang mulus.
HAL membuat penentuan akhir tentang suara mana yang harus diprioritaskan. Hingga saat ini, suara yang penting bagi keselamatan dan keselamatan harus tetap diputar terlepas apakah HAL diberi fokus audio atau tidak dan harus terus diputar sebagaimana mestinya meskipun HAL kehilangan fokus audio. Hal yang sama berlaku untuk semua suara yang diwajibkan oleh peraturan pemerintah.
HAL harus secara proaktif membisukan streaming Android yang sesuai saat diputar suara darurat atau keselamatan untuk memastikan suara tersebut terdengar dengan jelas.
AudioControl@2.0
Versi 2.0 AudioControl HAL memperkenalkan API baru ini:
API | Tujuan |
---|---|
IAudioControl#registerFocusListener |
Mendaftarkan instance IFocusListener dengan
HAL AudioControl. Pemroses ini mengaktifkan HAL meminta dan mengabaikan audio
fokus. HAl menyediakan instance ICloseHandle untuk digunakan oleh
Android untuk membatalkan pendaftaran pemroses. |
IAudioControl#onAudioFocusChange |
Memberi tahu HAL tentang perubahan status pada permintaan fokus yang dibuat oleh HAL
melalui IFocusListener , termasuk respons terhadap respons awal
fokus permintaan fokus. |
IFocusListener#requestAudioFocus
| Permintaan berfokus atas nama HAL untuk penggunaan tertentu, ID zona, dan fokus. |
IFocusListener#abandonAudioFocus |
Mengabaikan permintaan fokus HAL yang ada untuk penggunaan dan zona yang ditentukan ID |
HAL dapat memiliki beberapa permintaan fokus secara bersamaan, tetapi terbatas pada satu permintaan per penggunaan dan pemasangan ID zona. Android segera mengasumsikan HAL mulai memutar suara untuk suatu penggunaan setelah permintaan dibuat dan berlanjut untuk lakukan sampai mengabaikan fokus.
Selain registerFocusListener
, permintaan ini bernilai oneway
untuk memastikan bahwa
Android tidak menunda HAL saat permintaan fokus diproses. HAL seharusnya
tidak menunggu untuk mendapatkan fokus sebelum memutar suara yang penting bagi keselamatan. Bersifat opsional
agar HAL mendengar dan merespons
perubahan fokus audio melalui
IAudioControl#onAudioFocusChange
.
Layanan fokus audio mobil OEM
Di Android 14, AAOS memperkenalkan layanan plugin OEM mobil untuk mengaktifkan kemampuan konfigurasi untuk beberapa komponen mobil. Sebagai Layanan Plugin Audio Mobil, plugin memungkinkan OEM mengelola permintaan fokus yang dicegat oleh audio mobil layanan. Hal ini membuat OEM lebih fleksibel dalam hal mengelola fokus sesuai kebutuhan oleh aturan dan regulasi. Dengan demikian, interaksi fokus audio mungkin berbeda antara produsen, dan dari satu wilayah ke wilayah lain. Premis dasar untuk fokus audio tetap berlaku, aplikasi tetap harus meminta fokus untuk pengelolaan audio yang lebih baik untuk meningkatkan pengalaman pengguna. Secara umum, aturan tertentu masih berlaku untuk audio permintaan fokus oleh aplikasi:
Tanpa posisi, fokus audio prioritas tinggi (termasuk panggilan telepon, aplikasi peringatan darurat, atau notifikasi keselamatan), aplikasi harus dapat memperoleh audio fokus secara sementara atau permanen.
Saat fokus media aktif:
Aplikasi yang meminta fokus penggunaan panggilan harus dapat menerima panggilan secara serentak atau eksklusif.
Aplikasi yang meminta fokus penggunaan navigasi harus dapat menerima navigasi berfokus secara bersamaan atau eksklusif.
Aplikasi yang meminta fokus penggunaan asisten harus dapat menerima fokus penggunaan baik secara serentak maupun eksklusif.
Sambil berdiri, fokus audio prioritas tinggi (termasuk panggilan telepon, aplikasi peringatan darurat, atau notifikasi keselamatan) aktif, semua notifikasi masuk permintaan fokus audio tertunda harus diberikan atau ditunda sesuai kebutuhan.
Meskipun saran di atas tidak lengkap, saran tersebut dapat membantu aplikasi yang meminta fokus untuk mendapatkan fokus jika tidak ada suara prioritas tinggi yang aktif. Meskipun masih tinggi suara prioritas aktif, permintaan fokus yang tertunda harus tetap dipatuhi dan bisa mendapatkan fokus saat suara prioritas tinggi berhenti.