Aktif VIA'nın seçimi CarSettings'teki ManageAssistActivity
tarafından yapılır. Bu akış, Ayarlar ekranının Varsayılan uygulamalar bölümünün bir parçası olarak PackageInstaller
uygulaması tarafından tetiklenir.
Şekil 1. Ayarlar ekranındaki varsayılan uygulamalar
Seçilen VIA, sisteme iki şekilde sunulur:
-
RolesManager
sistem hizmetinin bir parçası olarak -
AssistUtils
dahili API'si aracılığıylaVoiceInteractionManagerService
tarafından.
Aday VIA'ların bir listesi, android.app.role.ASSISTANT
rol adıyla RolesManager
kullanılarak 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 ses tanıma için bir VoiceInteractionService
bir ses modeliyle ilişkilendirmenin uygun bir yolunu sağlar. Bu, kullanıcının yeni bir konuşma başlatmak için bir Ses Uygulaması (VA) ile etkileşime girmeyi talep ettiği en yaygın ve iyi bilinen etkileşim akışıdır. Bu şekilde başlatılan sesli oturumlar SHOW_SOURCE_ASSIST_GESTURE flag
tanımlanır.
Şekil 2. Özel kelime tetikleme
Efsane. Sistem hizmetleri açık mavi renkte, VIA bileşenleri ise yeşil renkte görünür.
PTT tetikleme
Bu, donanım düğmesine uzun veya kısa basıldığında geçerlidir. AAOS'ta PTT, CarInputService tarafından yönetilir. Varsayılan uygulamada bu hizmet, Araç HAL'i aracılığıyla alınan giriş olaylarını yönetir ve belirli bir ses etkileşimi durumunda, anahtar olaylara aşağıdaki mantığı uygular:
- Kısa PTT olayları (
KeyEvent.KEYCODE_VOICE_ASSIST
), yeni bir sesli oturum başlatmak içinVoiceInteractionManagerService
yönlendirilir. - Uzun PTT etkinlikleri önce projeksiyon alıcılarına (örneğin, Android Auto veya CarPlay), ardından Bluetooth bağlantılı cihazlara ve son olarak da yerel VIA uygulamasına aktarılır.
Bu akışı kullanarak başlatılan oturumlar SHOW_SOURCE_PUSH_TO_TALK
ile tanımlanır.
Şekil 3. PTT tetiklemesi
Bir donanım sesli kontrol düğmesini AAOS'a entegre etmek için bkz. Otomotiv Anahtar Girişi entegrasyonu.
Dokun-Konuş tetiklemesi (veya yazılım düğmesi)
Sistem kullanıcı arayüzünden sesli etkileşimin tetiklenmesi AssistUtil kullanılarak yapılır. Bu, yalnızca sistem kullanıcı arayüzü gibi paket 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şime geçiliyor. - Şu anda seçili olan VIA'nın hangisi olduğunu belirleyin.
Seçilen VIA uygulamasını dinamik olarak sunmak için sistem kullanıcı arayüzü RoleManager
kullanabilir ve ROLE_ASSISTANT
için rol sahibindeki değişiklikleri takip edebilir. TTT tetiklemenin nasıl uygulanacağına ilişkin bir örnek CarSystemUI, AssistantButton
bulunabilir.
Şekil 4. Dokun-Konuş tetiklemesi
Sesli asistan Dokunarak Oku (TTR)
Otomotiv'de,INBOX
veya INBOX_IN_GROUP
bildirimleri olarak tanımlanan Bildirim Merkezi'ne gönderilen bildirimler (örneğin, SMS mesajları), kullanıcının bildirimlerin seçilen VIA tarafından yüksek sesle okunmasını ve isteğe bağlı olarak sesle yanıtlanmasını sağlayan bir Oynat eylem düğmesi içerir.Şekil 5. Bildirimler
Bu akışın nasıl uygulanacağı hakkında daha fazla bilgi için bkz. Mesajlaşma komutlarını işleme .
Araç başlatıcısından VIA'yı başlatın
Diğer uygulamalar gibi VIA'lar da bildirimlerine bir veya daha fazla başlatıcı etkinliği ekleyebilir. Bu etkinliklerin ne yapacağına karar vermek, uygulama geliştiricisine ve OEM'in bu uygulamayı önceden yüklemeyi kabul etmesine bağlıdır.
Önemli. Otomotiv'de sistem faaliyetleri de dahil olmak üzere tüm faaliyetler sürüş sırasında UX kısıtlamalarına tabidir. Başlatıcı simgesinden etkinleştirmek istediğiniz deneyimin araç kullanırken de mevcut olması gerekiyorsa, bunu ya izin verilenler listesine ekleyin (OEM iseniz) ya da etkinliğe distractionOptimized
meta verilerle açıklama ekleyin. Daha fazla bilgi için bkz. Sürücünün dikkatini dağıtma kuralları .
DSP ve ses HAL
Eşzamanlı her zaman açık ses kaydı ve Eşzamanlı yakalamada ses HAL'si ile ilgili güncellenmiş yönergeleri incelediğinizden emin olun. Bu API'lere erişimin , Özel kelimelere yanıt verme bölümünde açıklandığı gibi, özel kelime algılama performansı üzerinde önemli bir etkisi olabilir.
İzinler
Sistem ayrıcalıklı izinler verin
Kullanıcı tarafından ayrıcalıklı izin verilemeyeceği göz önüne alındığında, VIA'nın bunlardan herhangi birine ihtiyacı varsa OEM'lerin APK'larını sistem görüntülerine önceden yüklemeleri ve bu izinleri yapılarında açıkça vermeleri gerekir. İzin isteme konusuna bakın.
Bunu yapmak için projenize bir ayrıcalık izin verilenler listesi bağımlılığı ekleyin:
Android.bp
android_app { ... required: ["privapp_allowlist_com.example.myvoicecontrol"], ... }
Sistem ayrıcalıklı 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 ön izinleri
İzin isteme bölümünde belirtildiği gibi VIA, belirli işlevlere erişim için kullanıcının iznini gerektirir. Bu izinlerden bazıları varsayılan VoiceInteractionService
önceden verilmiştir (bkz. DefaultPermissionGrantPolicy.java
). Varsayılan işleyicilere ilişkin izinler hakkında daha fazla bilgi için bkz. Yalnızca varsayılan işleyicilerde kullanılan izinler . default-permissions.xml
yapılandırma dosyasını kullanarak izinleri önceden vermek de mümkündür. İzinlerin önceden verilmesiyle ilgili kısıtlamalara ilişkin ayrıntılar için Android Uyumluluk Tanımı Belgesi'ndeki (CDD) Bölüm 9'a bakın.
Önemli. Her durumda, bu izinler yalnızca varsayılan VIA'ya önceden verilmiştir. Sistemde önceden yüklenmiş birden fazla VIA varsa, varsayılan olmayan VIA'nın, kurulumun bir parçası olarak veya ilk kullanım sırasında kullanıcıdan açıkça izin istemesi gerekir.
Dağıtım (güncellemelerin ön yüklemesi ve dağıtımı)
Önceden yüklenmiş VIA'lar /product/priv-apps
veya /vendor/priv-apps
bölümleri ve klasörleri altında bulunmalıdır ( Bölümlere genel bakış ve Ürün bölümleri oluşturma bölümünde bölümler hakkında daha fazla bilgi edinin).
İkinci durumda, satıcı bölümünün sistemden ayrı olarak güncellenebileceği göz önüne alındığında, burada barındırılan uygulamalar @hide sistem API'lerine erişemeyecektir. Önceden yüklenmiş uygulamaların konumuna bağlı olarak güncellemeler OTA (bkz. OTA güncellemeleri ) olarak veya bir uygulama mağazasından uygulama güncellemeleri aracılığıyla gerçekleştirilebilir.
Özelleştirme
Otomotive özgü kavramlarda belirtildiği gibi, UI/UX tutarlılığı ve kişiselleştirme otomotivde diğer form faktörlerinden daha önemlidir. Maksimum birlikte çalışabilirlik için AAOS Araç Kullanıcı Arayüzü kitaplığının kullanılması şiddetle tavsiye edilir. Bu kitaplık, OEM'ler tarafından özelleştirilmek üzere tasarlanan otomotiv uygulamalarına entegre edilebilecek bileşenleri ve kaynakları içerir. Bu şekilde tek bir APK, kullanıcı arayüzünün her araba modelinin tasarımına göre özelleştirilebileceği şekilde oluşturulabilir.