Etkin VIA seçimi, CarSettings'teki ManageAssistActivity
tarafından yapılır. Bu akış, Ayarlar ekranının Varsayılan uygulamalar bölümünde PackageInstaller
uygulaması tarafından tetiklenir.
Şekil 1. Ayarlar ekranındaki varsayılan uygulamalar
Seçilen VIA, sisteme iki şekilde gösterilir:
RolesManager
sistem hizmetinin bir parçası olarakVoiceInteractionManagerService
tarafındanAssistUtils
dahili API üzerinden.
android.app.role.ASSISTANT
rol adıyla RolesManager
kullanılarak olası VIA'ların listesi elde edilebilir.
Özel kelime tetikleme
Android, donanım DSP'sinin üzerinde bir soyutlama olarak AlwaysOnHotwordDetector sağlar. Bu, düşük enerjili, her zaman açık konuşma tanıma için bir VoiceInteractionService
'ü ses modeliyle ilişkilendirmenin uygun bir yolunu sağlar. Bu, kullanıcının yeni bir görüşme başlatmak için sesli uygulamayla (VA) etkileşim kurmayı istediği en yaygın ve bilinen etkileşim akışıdır. Bu şekilde başlatılan ses oturumları SHOW_SOURCE_ASSIST_GESTURE flag
ile tanımlanır.
Şekil 2. Özel kelime tetikleme
Efsane. Sistem hizmetleri açık mavi, VIA bileşenleri yeşil renkte gösterilir.
PTT tetikleme
Bu, donanım düğmesine uzun veya kısa basmak için geçerlidir. AAOS'te PTT, CarInputService tarafından yönetilir. Varsayılan bir uygulamada bu hizmet, araç HAL'i aracılığıyla alınan giriş etkinliklerini işler ve özellikle sesli etkileşim söz konusu olduğunda önemli etkinliklere aşağıdaki mantığı uygular:
- Kısa PTT etkinlikleri (
KeyEvent.KEYCODE_VOICE_ASSIST
), yeni bir ses oturumu başlatmak içinVoiceInteractionManagerService
'e yönlendirilir. - Uzun PTT etkinlikleri önce projeksiyon alıcılarına (ör. Android Auto veya CarPlay), ardından Bluetooth'a bağlı cihazlara ve son olarak yerel VIA uygulamasına iletilir.
Bu akış kullanılarak başlatılan oturumlar SHOW_SOURCE_PUSH_TO_TALK
ile tanımlanır.
Şekil 3. PTT tetikleme
Donanım sesli kontrol düğmesini AAOS'a entegre etmek için Automotive Key Input entegrasyonuna bakın.
Dokun ve Konuş tetikleyicisi (veya yazılım düğmesi)
Sistem kullanıcı arayüzünden sesli etkileşimi tetiklemek için AssistUtil kullanılır. Bu, yalnızca sistem kullanıcı arayüzü gibi paketlenmiş sistem uygulamaları tarafından kullanılabilen ve aşağıdakileri sağlayan gizli bir sistem API'sidir:
- Sesli kontrol oturumlarını başlatmak için
VoiceInteractionManagerService
ile etkileşim kurma - Şu anda seçili olan VIA'yı belirleyin.
Sistem kullanıcı arayüzü, seçili VIA uygulamasını dinamik olarak sunmak için RoleManager
'ü kullanabilir ve ROLE_ASSISTANT
rolü sahibindeki değişiklikleri takip edebilir.
TTT tetiklemenin nasıl uygulanacağına dair bir örneği CarSystemUI'de (AssistantButton
) bulabilirsiniz.
Şekil 4. Konuşmaya başlamak için dokunma tetikleyicisi
Sesli asistan dokunarak okuma (TTR)
Automotive'te, Bildirim Merkezi'ne gönderilen veINBOX
veya INBOX_IN_GROUP
bildirimleri olarak tanımlanan bildirimler (ör. SMS mesajları), kullanıcının bildirimleri seçili VIA tarafından sesli olarak okumasına ve isteğe bağlı olarak sesli olarak yanıtlamasına olanak tanıyan bir Oynat işlem düğmesi içerir.
Şekil 5. Bildirimler
Bu akışı nasıl uygulayacağınız hakkında daha fazla bilgi için Mesajlaşma komutlarını ele alma başlıklı makaleyi inceleyin.
VIA'yı Car Launcher'dan başlatma
Diğer uygulamalar gibi, VIA'lar da manifest dosyalarında bir veya daha fazla başlatıcı etkinliği içerebilir. Bu etkinliklerin ne işe yarayacağına karar vermek uygulama geliştiricinin ve bu uygulamayı önceden yüklemeyi kabul eden OEM'nin sorumluluğundadır.
Önemli. Automotive'ta sistem etkinlikleri dahil tüm etkinlikler, sürüş sırasında kullanıcı deneyimi kısıtlamalarına tabidir. Bir başlatıcı simgesinden etkinleştirmek istediğiniz deneyimin sürüş sırasında kullanılabilmesi gerekiyorsa deneyimi izin verilenler listesine ekleyin (OEM iseniz) veya etkinliği distractionOptimized
meta verileriyle annotate edin. Daha fazla bilgi için Sürücünün dikkatini dağıtan uygulamalarla ilgili yönergeler başlıklı makaleyi inceleyin.
DSP ve ses HAL
Eşzamanlı yakalama bölümünde, her zaman açık eşzamanlı ses kaydı ve ses HAL'i ile ilgili güncellenmiş kuralları inceleyin. Bu API'lere erişim, Önemli kelimelere yanıt verme bölümünde açıklandığı gibi önemli kelime algılama performansını önemli ölçüde etkileyebilir.
İzinler
Sistem ayrıcalıklı izinleri verme
Ayrıcalıklı izinlerin kullanıcı tarafından verilememesi nedeniyle, bir VIA'nın bunlardan herhangi birine ihtiyacı varsa OEM'lerin APK'larını sistem resimlerine önceden yüklemeleri ve bu izinleri derlemelerinde açıkça vermeleri gerekir. İzin isteğinde bulunma başlıklı makaleyi inceleyin.
Bunu yapmak için projenize ayrıcalık izin verilenler listesi bağımlılığı ekleyin:
Android.bp
android_app { ... required: ["privapp_allowlist_com.example.myvoicecontrol"], ... }
Sistem ayrıcalığı izin verilenler listesi izin dosyasını yourdata/etc/car
klasörüne ekleyin:
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>
Tehlikeli izinlerin önceden verilmesi
İzin iste bölümünde belirtildiği gibi, VIA belirli işlevlere erişmek için kullanıcı izni gerektirir. Bu izinlerden bazıları varsayılan VoiceInteractionService
için önceden verilir (DefaultPermissionGrantPolicy.java
bölümüne bakın). Varsayılan işleyicilerin izinleri hakkında daha fazla bilgi için Yalnızca varsayılan işleyicilerde kullanılan izinler başlıklı makaleyi inceleyin. default-permissions.xml
yapılandırma dosyasını kullanarak izinleri önceden vermek de mümkündür. İzinlerin önceden verilmesiyle ilgili kısıtlamalar hakkında ayrıntılı bilgi için Android
Uyumluluk Tanımlama Belgesi'ndeki 9. Bölümü inceleyin.
Önemli. Her durumda, bu izinler yalnızca varsayılan VIA'ya önceden verilir. Sistemde önceden yüklenmiş birden fazla VIA varsa varsayılan olmayan VIA, kurulumunun bir parçası olarak veya ilk kullanım sırasında kullanıcıdan açıkça izin istemelidir.
Dağıtım (güncellemeleri önceden yükleme ve dağıtma)
Önceden yüklenmiş VIA'lar /product/priv-apps
veya /vendor/priv-apps
bölüm ve klasörlerinde bulunmalıdır (Bölümler hakkında daha fazla bilgiyi Bölümlere genel bakış ve Ürün bölümleri oluşturma başlıklı makalelerde bulabilirsiniz).
İkinci durumda, tedarikçi firma bölümünün sistemden ayrı olarak güncellenebildiği göz önüne alındığında, burada barındırılan uygulamalar @hide sistem API'lerine erişemez. Önceden yüklenmiş uygulamaların konumuna bağlı olarak güncellemeler OTA olarak (OTA güncellemeleri bölümüne bakın) veya bir uygulama mağazasındaki uygulama güncellemeleri aracılığıyla yapılabilir.
Özelleştirme
Otomotive özgü kavramlar bölümünde belirtildiği gibi, kullanıcı arayüzü/kullanıcı deneyimi tutarlılığı ve özelleştirme, otomotiv sektöründe diğer form faktörlerinden daha önemlidir. Maksimum birlikte çalışabilirlik için AAOS araç kullanıcı arayüzü kitaplığının kullanılması önemle tavsiye edilir. Bu kitaplık, OEM'ler tarafından özelleştirilmek üzere tasarlanmış otomotiv uygulamalarına entegre edilebilecek bileşenleri ve kaynakları içerir. Bu sayede, tek bir APK'nın kullanıcı arayüzü her otomobil modelinin tasarımına göre özelleştirilebilir.