Pemilihan VIA aktif dilakukan oleh
ManageAssistActivity
di CarSettings. Alur ini dipicu oleh aplikasi PackageInstaller
, sebagai bagian
dari bagian Aplikasi default di layar Setelan.
Gambar 1. Aplikasi default di layar Setelan
VIA yang dipilih diekspos ke sistem dengan dua cara:
- Sebagai bagian dari layanan sistem
RolesManager
- Oleh
VoiceInteractionManagerService
melalui API internalAssistUtils
.
Daftar VIA kandidat dapat diperoleh menggunakan RolesManager
dengan nama peran android.app.role.ASSISTANT
.
Pemicu frasa pengaktif
Android menyediakan AlwaysOnHotwordDetector
sebagai abstraksi di atas DSP hardware. Hal ini memberikan cara yang mudah untuk
mengaitkan VoiceInteractionService
ke model suara untuk pengenalan suara
yang selalu aktif dan hemat energi. Ini adalah alur interaksi yang paling umum dan terkenal, saat pengguna
meminta untuk berinteraksi dengan Aplikasi Suara (VA) untuk memulai percakapan baru. Sesi
suara yang dimulai dengan cara ini diidentifikasi dengan SHOW_SOURCE_ASSIST_GESTURE flag
.
Gambar 2. Pemicu frasa pengaktif
Legenda. Layanan sistem muncul dalam warna biru muda, komponen VIA dalam warna hijau.
Pemicu PTT
Hal ini berlaku untuk penekanan tombol hardware yang lama atau singkat. Di AAOS, PTT ditangani oleh CarInputService. Dalam implementasi default, layanan ini menangani peristiwa input yang diterima melalui HAL Kendaraan, dan dalam kasus interaksi suara tertentu, layanan ini menerapkan logika berikut ke peristiwa utama:
- Peristiwa PTT singkat (
KeyEvent.KEYCODE_VOICE_ASSIST
) diarahkan keVoiceInteractionManagerService
untuk memulai sesi suara baru. - Peristiwa PTT panjang pertama kali diserahkan ke penerima proyeksi (misalnya, Android Auto atau CarPlay), lalu ke perangkat yang terhubung ke Bluetooth, dan terakhir ke aplikasi VIA lokal.
Sesi yang dimulai menggunakan alur ini diidentifikasi dengan SHOW_SOURCE_PUSH_TO_TALK
.
Gambar 3. Pemicu PTT
Untuk mengintegrasikan tombol kontrol suara hardware ke AAOS, lihat integrasi Input Kunci Otomotif.
Pemicu Ketuk untuk Bicara (atau tombol software)
Memicu interaksi suara dari UI sistem dilakukan menggunakan AssistUtil. Ini adalah API sistem tersembunyi yang hanya dapat digunakan oleh aplikasi sistem yang dipaketkan seperti UI sistem yang memungkinkan:
- Berinteraksi dengan
VoiceInteractionManagerService
untuk memulai sesi kontrol suara. - Tentukan VIA yang saat ini dipilih.
Untuk menampilkan aplikasi VIA yang dipilih secara dinamis, UI sistem dapat menggunakan
RoleManager
dan mengikuti perubahan pada holder peran untuk ROLE_ASSISTANT
.
Contoh cara menerapkan pemicu TTT dapat ditemukan di CarSystemUI, AssistantButton
.
Gambar 4. Pemicu Ketuk untuk Bicara
Ketuk untuk Membaca (TTR) asisten suara
Di Automotive, notifikasi yang diposting ke Pusat Notifikasi yang diidentifikasi sebagai notifikasiINBOX
atau INBOX_IN_GROUP
(misalnya, pesan SMS)
menyertakan tombol tindakan Play, yang memungkinkan pengguna membacakan notifikasi dengan keras
oleh VIA yang dipilih dan, secara opsional, membalas dengan suara.
Gambar 5. Notifikasi
Untuk mengetahui informasi selengkapnya tentang cara menerapkan alur ini, lihat Menangani perintah pesan.
Meluncurkan VIA dari peluncur mobil
Seperti aplikasi lainnya, VIA dapat menyertakan satu atau beberapa aktivitas peluncur di manifesnya. Developer aplikasi dan OEM yang menyetujui pra-penginstalan aplikasi ini dapat memutuskan apa yang akan dilakukan aktivitas ini.
Penting. Di Automotive, semua aktivitas, termasuk aktivitas
sistem, tunduk pada pembatasan UX saat mengemudi. Jika pengalaman yang ingin
diaktifkan dari ikon peluncur harus tersedia saat mengemudi, tambahkan ke
daftar yang diizinkan (jika Anda adalah OEM) atau anotasikan aktivitas dengan metadata
distractionOptimized
. Untuk informasi selengkapnya, lihat
Panduan gangguan pengemudi.
DSP dan HAL audio
Pastikan untuk meninjau panduan yang diperbarui terkait perekaman audio yang selalu aktif dan HAL audio serentak di Perekaman serentak. Akses ke API ini dapat berdampak signifikan pada performa deteksi kata kunci panas seperti yang dijelaskan di Merespons kata kunci panas.
Izin
Memberikan izin hak istimewa sistem
Mengingat bahwa izin dengan hak istimewa tidak dapat diberikan oleh pengguna, jika VIA memerlukan salah satu izin tersebut, OEM harus memuat APK di image sistem mereka, dan memberikan izin tersebut secara eksplisit dalam build mereka. Lihat Meminta izin.
Untuk melakukannya, tambahkan dependensi daftar yang diizinkan hak istimewa ke project Anda:
Android.bp
android_app { ... required: ["privapp_allowlist_com.example.myvoicecontrol"], ... }
Tambahkan file izin daftar yang diizinkan hak istimewa sistem ke folder
yourdata/etc/car
:
vendor/…/data/etc/car/Android.bp
prebuilt_etc { name:privapp_allowlist_com.example.myvoicecontrol", sub_dir: "permissions", src: "com.example.myvoicecontrol.xml", filename_from_src: true, }
vendor/…/data/etc/car/com.example.myvoicecontrol.xml
<?xml version="1.0" encoding="utf-8"?> <permissions> <privapp-permissions package="com.android.car.voicecontrol"> <permission name="android.permission.MEDIA_CONTENT_CONTROL"/> </privapp-permissions> </permissions>
Pra-pemberian izin berbahaya
Seperti yang ditunjukkan dalam
Meminta
izin, VIA memerlukan izin pengguna untuk mengakses fungsi tertentu. Beberapa izin
ini telah diberikan sebelumnya ke VoiceInteractionService
default (lihat
DefaultPermissionGrantPolicy.java
).
Untuk informasi selengkapnya tentang izin untuk pengendali default, lihat
Izin
yang hanya digunakan dalam pengendali default. Anda juga dapat memberikan izin terlebih dahulu menggunakan file konfigurasi
default-permissions.xml
. Untuk mengetahui detail tentang
batasan terkait pemberian izin sebelumnya, lihat Bagian 9 dalam
Dokumen Definisi Kompatibilitas (CDD) Android.
Penting. Dalam semua kasus, hanya VIA default yang akan mendapatkan izin ini secara otomatis. Jika sistem memiliki lebih dari satu VIA yang dimuat sebelumnya, VIA non-default harus meminta izin secara eksplisit kepada pengguna sebagai bagian dari penyiapannya atau selama penggunaan pertama.
Distribusi (pra-penginstalan dan deployment update)
VIA yang diprainstal harus berada di partisi dan folder /product/priv-apps
atau
/vendor/priv-apps
(lihat selengkapnya tentang partisi di Ringkasan partisi dan
Mem-build partisi
produk).
Dalam kasus kedua, mengingat partisi vendor dapat diupdate secara terpisah dari sistem, aplikasi yang dihosting di sini tidak akan dapat mengakses @hide system API. Bergantung pada lokasi aplikasi bawaan, update dapat dilakukan sebagai OTA (lihat Update OTA) atau melalui update aplikasi dari app store.
Penyesuaian
Seperti yang disebutkan dalam Konsep khusus otomotif, konsistensi dan penyesuaian UI/UX lebih penting dalam otomotif daripada dalam faktor bentuk lainnya. Untuk interoperabilitas maksimum, penggunaan library UI Mobil AAOS sangat direkomendasikan. Library ini mencakup komponen dan resource yang dapat diintegrasikan ke dalam aplikasi otomotif yang dirancang untuk disesuaikan oleh OEM. Dengan cara ini, satu APK dapat di-build sedemikian rupa sehingga UI-nya dapat disesuaikan dengan desain setiap model mobil.