Android Automotive, sesin Google'ın sahip olduğu
güvenli etkileşimlerdir ve kullanıcıların bunları gerçekleştirmesini
Android Automotive OS ile etkileşime girmesini sağlar. Sonuç olarak,
Android sesli asistan API'leri (VoiceInteractionSession
dahil)
sesli asistanların kullanıcılar için görevleri yerine getirmesini sağlamak
araç sürerken başarılması zor olabiliyor.
Dokun ve Oku özelliği, sesli asistanların kısa mesajları açık olarak okumasına ve yanıtlamasına olanak tanır.
Kullanıcı, mesaj bildirimleriyle etkileşimde bulunduğunda temsil eder. Bu hesabın
entegre edebildiğiniz için sesli asistanı
CarVoiceInteractionSession
Otomotiv'de Bildirim Merkezi'nde yayınlanan bildirimler tespit edildi
INBOX
olarak
veya INBOX_IN_GROUP
(örneğin, SMS mesajları) bir
Oyna düğmesi. Kullanıcı, seçilen öğeyi etkinleştirmek için Oyna'yı tıklayabilir.
sesli asistan, bildirimi sesli okur ve isteğe bağlı olarak sesli yanıt verir.
Şekil 1. Oynat düğmesi bulunan Dokundur ve Oku bildirimi.
CarVoiceEngagementSession ile entegrasyon
Sonraki bölümlerde, bir sesli asistanın
CarVoiceInteractionSession
Sesli etkileşimleri destekleyin
Araç sesli etkileşim hizmetleri sağlayan uygulamalar zorunludur
Android'in mevcut sesli etkileşimlerine
entegre edebiliyoruz. Daha fazla bilgiyi Android için Google Asistan bölümünde bulabilirsiniz.
(VoiceInteractionSession
hariç). Tüm sesli etkileşim API'si
öğeler, mobil cihazlarda uygulananlarla aynı kalır; CarVoiceInteractionSession
(Implement CarVoiceEngagementSession bölümünde açıklanmıştır)
VoiceInteractionSession
. Daha fazla bilgi için şu sayfalara bakın:
CarVoiceEngagementSession'ı uygulama
CarVoiceInteractionSession
.
sesli yardımların kısa mesajları sesli olarak okumasını etkinleştirmek için kullanabileceğiniz API'leri görüntüler ve ardından
e-postalara kullanıcı adına yanıt verme.
CarVoiceInteractionSession
ve arasındaki temel fark
VoiceInteractionSession
sınıf
CarVoiceInteractionSession
onShow
oyununda pas kazandı
Böylece sesli asistan, kullanıcının isteğinin bağlamını anında algılayabilir
CarVoiceInteractionSession
bir oturum başlatır. onShow
için parametreler
aşağıdaki tabloda listelenmiştir:
ArabaylaSes EtkileşimiOturumu | SesliEtkileşimOturumu |
---|---|
onShow , şu üç parametreyi alır:
|
onShow , şu iki parametreyi alır:
|
Android 10'daki değişiklikler
Android 10'dan itibaren platformda VoiceInteractionService.onGetSupportedVoiceActions
çağrılıyor
desteklenen işlemleri tespit etmek için kullanır. Sesli asistan
VoiceInteractionService.onGetSupportedVoiceActions
,
aşağıdaki örnekte gösterildiği gibi:
public class MyInteractionService extends VoiceInteractionService { private static final ListSUPPORTED_VOICE_ACTIONS = Arrays.asList( CarVoiceInteractionSession.VOICE_ACTION_READ_NOTIFICATION); @Override public Set onGetSupportedVoiceActions(@NonNull Set voiceActions) { Set result = new HashSet<>(voiceActions); result.retainAll(SUPPORTED_VOICE_ACTIONS); return result; } }
Geçerli işlemler aşağıdaki tabloda açıklanmıştır. Her işlemle ilgili ayrıntılar için bkz. Sıra diyagramları.
İşlem | Beklenen yük | Beklenen sesli etkileşim işlemi |
---|---|---|
VOICE_ACTION_READ_NOTIFICATION |
Mesajları kullanıcıya sesli olarak okuyun ve ardından Okundu Olarak İşaretle seçeneğini tetikleyin niyetlerini geri alamazsınız. İsteğe bağlı olarak, yanıt vermesi gerekir. | |
VOICE_ACTION_REPLY_NOTIFICATION |
Anahtarla birlikte ayrıştırılabilir. . KEY_NOTIFICATION
StatusBarNotification ile eşleşen.. android.permission.BIND_NOTIFICATION_LISTENER_SERVICE gerektirir. |
Kullanıcıdan yanıt mesajını belirtmesini isteyin, yanıt mesajını şuraya girin:
RemoteInputReply ve ardından
beklemedeki niyete göre belirleniyor. |
VOICE_ACTION_HANDLE_EXCEPTION |
Anahtarlı dize. . KEY_EXCEPTION
ExceptionValue ile eşleşen
(İstisna değerleri bölümünde açıklanmıştır).. Boole değeriyle eşlenen KEY_FALLBACK_ASSISTANT_ENABLED . Değer
true , kullanıcının isteğini işleyebilecek yedek asistan
devre dışı bırakıldı. |
İstisna için yapılması beklenen işlem diğer dokümanlara göz atın. |
İstisna değerleri
EXCEPTION_NOTIFICATION_LISTENER_PERMISSIONS_MISSING
.
sesli asistana Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE
izninin olmadığını ve kullanıcıdan bu iznin alınması gerektiğini belirtir.
Bildirim dinleyici izni isteme
Varsayılan sesli asistanda bildirim dinleyici yoksa
platformun FallbackAssistant
(araba üreticisi tarafından etkinleştirildiyse), sesli asistan devre dışı bırakılmadan önce mesajı sesli okuyabilir.
bildirimi gönderilir. FallbackAssistant
hizmetinin etkin olup olmadığını ve
mesajı okuduysa, sesli asistanın mesajı kontrol etmesi
Yükteki boole değeri: KEY_FALLBACK_ASSISTANT_ENABLED
.
Platform, sesli asistana şunun için hız sınırlama mantığı eklemesini öneriyor:
bu iznin istenme sayısı. Böylece, bunu yapmayan kullanıcılara
sesli asistana bu izni vermek istiyor ve
Kısa mesajları sesli okumak için FallbackAssistant
. Bir
kullanıcı bir mesaj bildiriminde Oynat'a her bastığında izin almak için kullanıcı
olumsuz bir kullanıcı deneyimine yol açabilir. Platformda oran sınırı uygulanmamalıdır.
sesli asistan adına yapabilirsiniz.
Bildirim dinleyici izni istenirken sesli asistan
Kullanıcının park halinde mi yoksa araçla mı gittiğini belirlemek için CarUxRestrictionsManager
kullanın. Kullanıcı araba kullanıyorsa sesli asistan
iznin nasıl verileceğine ilişkin talimatları içeren bir bildirim görüntüler. İşlem devam ediyor
daha güvenli olduğunda izin vermesine yardımcı olur (ve bunu hatırlatır).
StatusBarBildirim ile çalışma
StatusBarNotification
, Okuma ve Yanıtlama ödeviyle teslim edildi
sesli işlemler her zaman açıklandığı gibi araba ile uyumlu mesajlaşma bildiriminde bulunur
Bildir
ileti kullanıcıları. Bazı bildirimlerde Yanıt Beklemede
Okundu olarak işaretle bekleyen amaçları var.
Bildirimlerle etkileşimleri kolaylaştırmak için NotificationPayloadHandler
,
Bu sekme, bildirimden iletileri ayıklama ve
mesajları bildirimin beklemedeki uygun amacına göre yanıtlamalıdır.
sesli asistan mesajı okur, sesli asistanın İşaretçiyi tetiklemesi gerekir
okuma amacı olarak ayarlanır.
Dokundur ve Okuyun ön koşullarını yerine getirin
Varsayılan sesin yalnızca VoiceInteractionSession
kadarı
kullanıcı, sesli işlemi tetiklediğinde Asistan'a bildirim gönderilir.
mesajları yanıtlayabilir. Yukarıda belirtildiği gibi bu varsayılan sesli asistan ayrıca
bildirim dinleyici iznine sahip olmanız gerekir.
Dizi diyagramları
Bu şekiller CarVoiceInteractionSession actions
mantıksal akışlarını gösterir:
Şekil 2. VOICE_ACTION_READ_Bildirim için sıra şeması.
Şekil 3'te, izin isteklerinde oran sınırlarının uygulanması önerilir:
Şekil 3. VOICE_ACTION_REPLY_Bildirim için sıra şeması.
4.Şekil VOICE_ACTION_HANDLE_EXCEPTION için sıra şeması.
Uygulamanın adını okuma
Mesajlaşma sırasında sesli asistanınızın mesajlaşma uygulamasının adını sesli okumasını mesaj okuması (örneğin, "Hangouts'tan Sammy şunu dedi:") aşağıdakine benzer bir işlev oluşturun: aşağıdaki kod örneğinde, asistanın doğru adı okuduğundan emin olun:
@Nullable String getMessageApplicationName(Context context, StatusBarNotification statusBarNotification) { ApplicationInfo info = getApplicationInfo(context, statusBarNotification.getPackageName()); if (info == null) return null; Notification notification = statusBarNotification.getNotification(); // Sometimes system packages will post on behalf of other apps, so check this // field for a system app notification. if (isSystemApp(info) && notification.extras.containsKey(Notification.EXTRA_SUBSTITUTE_APP_NAME)) { return notification.extras.getString(Notification.EXTRA_SUBSTITUTE_APP_NAME); } else { PackageManager pm = context.getPackageManager(); return String.valueOf(pm.getApplicationLabel(info)); } } @Nullable ApplicationInfo getApplicationInfo(Context context, String packageName) { final PackageManager pm = context.getPackageManager(); ApplicationInfo info; try { info = pm.getApplicationInfo(packageName, 0); } catch (PackageManager.NameNotFoundException e) { return null; } return info; } boolean isSystemApp(ApplicationInfo info) { return (info.flags & ApplicationInfo.FLAG_SYSTEM) != 0; }