Sesli Etkileşim Uygulaması (VIA) uygulamak için aşağıdaki adımları tamamlayın:
- VIA iskeleti oluşturun.
- (isteğe bağlı) Kurulum/oturum açma akışı uygulayın.
- (isteğe bağlı) Ayarlar ekranı uygulayın.
- Gerekli izinleri manifest dosyasında beyan edin.
- Sesli plaka kullanıcı arayüzü uygulayın.
- Ses tanımayı uygulayın (RecognitionService API uygulamasını içermelidir).
- Sözcüğü uygulayın (isteğe bağlı olarak TextToSpeech API'yi uygulayabilirsiniz).
- Komutların yerine getirilmesini uygulayın. Bu içeriği Komutları yerine getirme bölümünde bulabilirsiniz.
Aşağıdaki bölümlerde, yukarıda belirtilen her bir adımın nasıl tamamlanacağı açıklanmaktadır.
VIA iskeleti oluşturma
Manifestler
Bir uygulama, manifest dosyasına aşağıdakiler dahil edildiğinde sesli etkileşime sahip olarak algılanır:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myvoicecontrol"> ... <application ... > <service android:name=".MyInteractionService" android:label="@string/app_name" android:permission="android.permission.BIND_VOICE_INTERACTION" android:process=":interactor"> <meta-data android:name="android.voice_interaction" android:resource="@xml/interaction_service" /> <intent-filter> <action android:name= "android.service.voice.VoiceInteractionService" /> </intent-filter> </service> </application> </manifest>
Bu örnekte:
- VIA'lar,
VoiceInteractionService.SERVICE_INTERFACE ("android.service.voice.VoiceInteractionService")
işlemi için bir intent filtresi içerenVoiceInteractionService
'ü genişleten bir hizmet sunmalıdır. - Bu hizmetin
BIND_VOICE_INTERACTION
sistem imza izni olmalıdır. - Bu hizmet, aşağıdakileri içeren bir
android.voice_interaction
meta veri dosyası içermelidir:res/xml/interaction_service.xml
<voice-interaction-service xmlns:android="http://schemas.android.com/apk/res/android" android:sessionService= "com.example.MyInteractionSessionService" android:recognitionService= "com.example.MyRecognitionService" android:settingsActivity= "com.example.MySettingsActivity" android:supportsAssist="true" android:supportsLaunchVoiceAssistFromKeyguard="true" android:supportsLocalInteraction="true" />
Her alanla ilgili ayrıntılı bilgi için R.styleable#VoiceInteractionService
başlıklı makaleyi inceleyin.
Tüm VIA'ların ses tanımlayıcı hizmetleri de olması nedeniyle manifest dosyanıza aşağıdakileri de eklemeniz gerekir:
AndroidManifest.xml
<manifest ...> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <application ...> ... <service android:name=".RecognitionService" ...> <intent-filter> <action android:name="android.speech.RecognitionService" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.speech" android:resource="@xml/recognition_service" /> </service> </application> </manifest>
Ses tanıma hizmetleri için aşağıdaki meta veri de gereklidir:
res/xml/recognition_service.xml
<recognition-service xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="com.example.MyRecognizerSettingsActivity" />
VoiceInteractionService, VoiceInteractionSessionService ve VoiceInteractionSession
Aşağıdaki diyagramda bu öğelerin her birinin yaşam döngüsü gösterilmektedir:
Şekil 1. Yaşam döngüleri
Daha önce de belirtildiği gibi, VoiceInteractionService
bir VIA'nın giriş noktasıdır. Bu hizmetin temel sorumlulukları şunlardır:
- Bu VIA etkin olduğu sürece çalışmaya devam etmesi gereken tüm işlemleri başlatın. Örneğin, özel kelime algılama.
- Desteklenen sesli işlemleri raporlar (Google Asistan Dokunarak Oku bölümüne bakın).
- Kilit ekranından (kilit koruyucu) sesli etkileşim oturumları başlatma.
En basit haliyle bir VoiceInteractionService uygulaması aşağıdaki gibi görünür:
public class MyVoiceInteractionService extends VoiceInteractionService { private static final List<String> SUPPORTED_VOICE_ACTIONS = Arrays.asList( CarVoiceInteractionSession.VOICE_ACTION_READ_NOTIFICATION, CarVoiceInteractionSession.VOICE_ACTION_REPLY_NOTIFICATION, CarVoiceInteractionSession.VOICE_ACTION_HANDLE_EXCEPTION ); @Override public void onReady() { super.onReady(); // TODO: Setup hotword detector } @NonNull @Override public Set<String> onGetSupportedVoiceActions( @NonNull Set<String> voiceActions) { Set<String> result = new HashSet<>(voiceActions); result.retainAll(SUPPORTED_VOICE_ACTIONS); return result; } ... }
Google Asistan Dokunarak Oku özelliğini işlemek için VoiceInteractionService#onGetSupportedVoiceActions()
'ün uygulanması gerekir.
Sistem, VoiceInteractionSession oluşturmak ve bu oturumla etkileşimde bulunmak için VoiceInteractionSessionService kullanır. Tek sorumluluğu, istendiğinde yeni oturumlar başlatmaktır.
public class MyVoiceInteractionSessionService extends VoiceInteractionSessionService { @Override public VoiceInteractionSession onNewSession(Bundle args) { return new MyVoiceInteractionSession(this); } }
Son olarak, işin çoğunun yapıldığı yer VoiceInteractionSession'dır. Tek bir oturum örneği, birden fazla kullanıcı etkileşimini tamamlamak için yeniden kullanılabilir. AAOS'ta, otomotiv sektörüne özgü bazı işlevlerin uygulanmasına yardımcı olan bir yardımcı CarVoiceInteractionSession
vardır.
public class MyVoiceInteractionSession extends CarVoiceInteractionSession { public InteractionSession(Context context) { super(context); } @Override protected void onShow(String action, Bundle args, int showFlags) { closeSystemDialogs(); // TODO: Unhide UI and update UI state // TODO: Start processing audio input } ... }
VoiceInteractionSession
, aşağıdaki bölümlerde açıklanan çok sayıda geri çağırma yöntemine sahiptir. Tam listeyi VoiceInteractionSession
dokümanlarında bulabilirsiniz.
Kurulum/oturum açma akışı uygulama
Kurulum ve oturum açma işlemleri şunlar olabilir:
- Cihazın ilk kurulumu sırasında (Kurulum Sihirbazı).
- Sesli etkileşim hizmeti değişimi sırasında (Ayarlar).
- Uygulama seçildiğinde ilk başlatma sırasında.
Öne yüklenmiş asistanlar için önerilen kullanıcı deneyimi ve görsel rehberlik hakkında ayrıntılı bilgi edinmek istiyorsanız Önceden yüklenmiş asistanlar: Kullanıcı deneyimi rehberliği başlıklı makaleyi inceleyin.
Sesli hizmet değişimi sırasında kurulum
Kullanıcının, doğru şekilde yapılandırılmamış bir VIA seçmesi her zaman mümkündür. Bunun nedeni aşağıdakilerden biri olabilir:
- Kullanıcı, Kurulum Sihirbazı'nı tamamen atladı veya sesli etkileşim yapılandırma adımını atladı.
- Kullanıcı, cihazın ilk kurulumu sırasında yapılandırılandan farklı bir VIA seçti.
Her durumda, VoiceInteractionService
'nin kullanıcıyı kurulumu tamamlamaya teşvik etmenin birkaç yolu vardır:
- Bildirim hatırlatıcısı.
- Kullanıcı kullanmaya çalıştığında otomatik sesli yanıt.
Not: Belirli bir kullanıcı isteği olmadan VIA kurulum akışı sunulması önerilmez. Bu nedenle, VIA'lar cihazın başlatılması veya kullanıcının geçiş yapması ya da kilidi açması sonucunda HU'da otomatik olarak içerik göstermemelidir.
Bildirim hatırlatıcısı
Bildirim hatırlatıcısı, kurulum ihtiyacını belirtmenin ve kullanıcılara asistan kurulum akışında gezinme olanağı sağlamanın müdahaleci olmayan bir yoludur.
Şekil 2. Bildirim hatırlatıcısı
Bu akış şu şekilde işler:
Şekil 3. Bildirim hatırlatıcısı akışı
Sesli yanıt
Bu, uygulanması en kolay akıştır. VoiceInteractionSession#onShow()
geri çağırma sırasında bir ifade başlatır, kullanıcıya yapılması gerekenleri açıklar ve ardından (UX Kısıtlama durumu göz önüne alındığında kuruluma izin veriliyorsa) kurulum akışını başlatmak isteyip istemediğini sorar. Kurulum şu anda mümkün değilse bu durumu da açıklayın.
İlk kullanımda kurulum
Kullanıcının, doğru şekilde yapılandırılmamış bir VIA'yı tetiklemesi her zaman mümkündür. Bu gibi durumlarda:
- Kullanıcıyı sözlü olarak bu durum hakkında bilgilendirin (örneğin, "Düzgün çalışması için birkaç adımı tamamlamanız gerekiyor… ").
- UX kısıtlamaları motoru izin veriyorsa (UX_RESTRICTIONS_NO_SETUP bölümüne bakın) kullanıcıya kurulum işlemini başlatmak isteyip istemediğini sorun ve ardından VIA'nın Ayarlar ekranını açın.
- Aksi takdirde (örneğin, kullanıcı araba kullanıyorsa) kullanıcının güvenli bir zamanda seçeneği tıklaması için bir bildirim bırakın.
Sesli etkileşim kurulum ekranları oluşturma
Kurulum ve oturum açma ekranları normal etkinlikler olarak geliştirilmelidir. Önceden Yüklenmiş Asistanlar: Kullanıcı Deneyimi Rehberi başlıklı makalede, kullanıcı arayüzü geliştirmeyle ilgili kullanıcı deneyimi ve görsel yönergeleri bulabilirsiniz.
Genel yönergeler:
- VIA'lar, kullanıcıların kurulumu istedikleri zaman kesintiye uğratmasına ve devam ettirmesine izin vermelidir.
UX_RESTRICTIONS_NO_SETUP
kısıtlaması geçerliyse kuruluma izin verilmemelidir. Ayrıntılar için Sürücünün Dikkatinin Dağılmasına Yol Açan Uygulamalar Hakkında Yönergeler başlıklı makaleyi inceleyin.- Kurulum ekranları, her aracın tasarım sistemiyle eşleşmelidir. Genel ekran düzeni, simgeler, renkler ve diğer yönler kullanıcı arayüzünün geri kalanıyla tutarlı olmalıdır. Ayrıntılar için Özelleştirme bölümüne bakın.
Ayarlar ekranı uygulama
Şekil 4. Ayarlar entegrasyonu
Ayarlar ekranları normal Android etkinlikleridir. Uygulanırsa giriş noktaları, VIA manifestlerinin bir parçası olarak res/xml/interaction_service.xml
içinde beyan edilmelidir (Manifestler bölümüne bakın).
Ayarlar bölümü, kuruluma ve oturum açmaya devam etmek (kullanıcı bunu tamamlamadıysa) veya gerekirse oturum kapatma ya da kullanıcı değiştirme seçeneği sunmak için iyi bir yerdir. Yukarıda açıklanan kurulum ekranlarına benzer şekilde, bu ekranlar:
- Ekran yığınında önceki ekrana (ör. Araba Ayarları) dönme seçeneği sunun.
- Sürüş sırasında izin verilmez. Ayrıntılar için Sürücünün Dikkatinin Dağılmasına Yol Açan Uygulamalar Hakkında Yönergeler başlıklı makaleyi inceleyin.
- Her bir araç tasarım sistemini eşleştirin. Ayrıntılar için Özelleştirme bölümüne bakın.
Manifest dosyasında gerekli izinleri beyan etme
VIA'nın gerektirdiği izinler üç kategoriye ayrılabilir:
- Sistem imza izinleri. Bu izinler yalnızca önceden yüklenmiş, sistem tarafından imzalanan APK'lara verilir. Kullanıcılar bu izinleri veremez. Yalnızca OEM'ler, sistem resimlerini oluştururken bu izinleri verebilir. İmza izinleri alma hakkında daha fazla bilgi için Sistem ayrıcalıklı izinleri verme başlıklı makaleyi inceleyin.
- Tehlikeli izinler. Bunlar, kullanıcının PermissionsController iletişim kutusunu kullanarak vermesi gereken izinlerdir. OEM'ler bu izinlerden bazılarını varsayılan VoiceInteractionService'e önceden verebilir. Ancak bu varsayılan ayarın cihazdan cihaza değişebileceği göz önüne alındığında, uygulamalar gerektiğinde bu izinleri istemelidir.
- Diğer izinler. Bunlar, kullanıcı müdahalesi gerektirmeyen diğer tüm izinlerdir. Bu izinler sistem tarafından otomatik olarak verilir.
Yukarıdakiler göz önüne alındığında, aşağıdaki bölümde yalnızca tehlikeli izinlerin istenmesi ele alınmaktadır. İzinler yalnızca kullanıcı oturum açma veya ayar ekranlarındayken istenmelidir.
Uygulamanın çalışması için gereken izinlere sahip olmaması durumunda, durumu kullanıcıya açıklamak için bir sesli ifade ve kullanıcının VIA ayarları ekranlarına geri dönmek için kullanabileceği bir imkân sağlamak üzere bir bildirim kullanılması önerilir. Ayrıntılar için 1. Bildirim hatırlatıcısı.
Ayar ekranının bir parçası olarak izin isteme
Tehlikeli izinler, normal ActivityCompat#requestPermission()
yöntemi (veya eşdeğeri) kullanılarak istenir. İzin isteme hakkında ayrıntılı bilgi için Uygulama İzni İsteme başlıklı makaleyi inceleyin.
Şekil 5. İzin isteme
Bildirim dinleyici izni
TTR akışını uygulamak için VIA'ların bildirim dinleyicisi olarak atanması gerekir. Bu aslında bir izin değil, sistemin kayıtlı dinleyicilere bildirim göndermesine olanak tanıyan bir yapılandırmadır. VIA'ya bu bilgilere erişim izni verilip verilmediğini öğrenmek için uygulamalar:
- (İsteğe bağlı)
CarAssistUtils#assistantIsNotificationListener()
kullanarak bildirim dinleyici olup olmadığını önceden kontrol edin. Bu işlem, örneğin kurulum akışı sırasında yapılabilir. - (Zorunlu)
CarVoiceInteractionSession#onShow()
öğesininVOICE_ACTION_HANDLE_EXCEPTION
işlemiyle veEXCEPTION_NOTIFICATION_LISTENER_PERMISSIONS_MISSING
istisnasıyla ele alınmasına tepki verin.
Bu erişim önceden verilmemişse VIA, kullanıcıyı ifadeler ve bildirimlerin bir kombinasyonunu kullanarak Araba Ayarları'nın Bildirim Erişimi bölümüne yönlendirmelidir. Aşağıdaki kod, ayarlar uygulamasının ilgili bölümünü açmak için kullanılabilir:
private void requestNotificationListenerAccess() { Intent intent = new Intent(Settings .ACTION_NOTIFICATION_LISTENER_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); startActivity(intent); }
Sesli plaka kullanıcı arayüzü uygulama
Bir VoiceInteractionSession
, onShow()
geri araması aldığında sesli plaka kullanıcı arayüzü sunabilir. Sesli plaka uygulamasıyla ilgili görsel ve kullanıcı deneyimi yönergeleri için Önceden Yüklü Asistanlar: Kullanıcı Deneyimi Kılavuzu başlıklı makaleyi inceleyin.
Şekil 6. Ses plakasını görüntüleme
Bu kullanıcı arayüzünü uygulamak için iki seçenek vardır:
VoiceInteractionSession#onCreateContentView()
öğesini geçersiz kılmaVoiceInteractionSession#startAssistantActivity()
'ü kullanarak etkinlik başlatma
onCreateContentView() işlevini kullanma
Bu, ses plakasını sunmanın varsayılan yoludur. VoiceInteractionSession
Temel sınıf, bir ses oturumu etkin olduğu sürece bir pencere oluşturur ve yaşam döngüsünü yönetir. Uygulamalar, oturum oluşturulur oluşturulmaz VoiceInteractionSession#onCreateContentView()
'ü geçersiz kılmamalı ve bu pencereye bağlı bir görünüm döndürmelidir. Bu görünüm başlangıçta görünmez olmalıdır. Sesli etkileşim başladığında bu görünüm VoiceInteractionSession#onShow()
'te görünür hale getirilmeli ve ardından VoiceInteractionSession#onHide()
'te tekrar görünmez hale getirilmelidir.
public class MyVoiceInteractionSession extends CarVoiceInteractionSession { private View mVoicePlate; … @Override public View onCreateContentView() { mVoicePlate = inflater.inflate(R.layout.voice_plate, null); … } @Override protected void onShow(String action, Bundle args, int showFlags) { // TODO: Update UI state to "listening" mVoicePlate.setVisibility(View.VISIBLE); } @Override public void onHide() { mVoicePlate.setVisibility(View.GONE); } … }
Bu yöntemi kullanırken kullanıcı arayüzünüzün gizlenen bölgelerini hesaba katmak için VoiceInteractionSession#onComputeInsets()
değerini ayarlamak isteyebilirsiniz.
startAssistantActivity() işlevini kullanma
Bu durumda VoiceInteractionSession
, sesli ekran kullanıcı arayüzünün işlenmesini normal bir etkinliğe delege eder. Bu seçenek kullanıldığında VoiceInteractionSession
uygulaması, onPrepareShow()
geri çağırma işlevinde varsayılan içerik penceresinin oluşturulmasını devre dışı bırakmalıdır (onCreateContentView() işlevini kullanma bölümüne bakın). VoiceInteractionSession#onShow()
zamanında oturum, VoiceInteractionSession#startAssistantActivity()
kullanarak sesli plaka etkinliğini başlatır. Bu yöntem, kullanıcı arayüzünü uygun pencere ayarlarıyla ve etkinlik işaretleriyle başlatır.
public class MyVoiceInteractionSession extends CarVoiceInteractionSession { … @Override public void onPrepareShow(Bundle args, int showFlags) { super.onPrepareShow(args, showFlags); setUiEnabled(false); } @Override protected void onShow(String action, Bundle args, int showFlags) { closeSystemDialogs(); Intent intent = new Intent(getContext(), VoicePlateActivity.class); intent.putExtra(VoicePlateActivity.EXTRA_ACTION, action); intent.putExtra(VoicePlateActivity.EXTRA_ARGS, args); startAssistantActivity(intent); } … }
Bu etkinlik ile VoiceInteractionSession
arasında iletişimi sürdürmek için bir dizi dahili Intent veya hizmet bağlaması gerekebilir. Örneğin, VoiceInteractionSession#onHide()
çağrıldığında oturum bu isteği etkinliğe iletebilmelidir.
Önemli. Otomotiv'te, sürüş sırasında yalnızca özel olarak ek açıklama eklenmiş etkinlikler veya UXR "izin verilenler listesi"nde listelenen etkinlikler gösterilebilir. Bu durum, VoiceInteractionSession#startAssistantActivity()
ile başlayan etkinlikler için de geçerlidir. Etkinliğinizi <meta-data
android:name="distractionOptimized" android:value="true"/>
ile notlandırmayı veya bu etkinliği /packages/services/Car/service/res/values/config.xml
dosyasının systemActivityWhitelist
anahtarına eklemeyi unutmayın. Daha fazla bilgi için Sürücünün Dikkatinin Dağılmasıyla İlgili Yönergeler'e bakın.
Ses tanımayı uygulama
Bu bölümde, sıcak kelimelerin algılanması ve tanınması yoluyla ses tanımayı nasıl uygulayacağınızı öğreneceksiniz. Etkin kelime, sesli olarak yeni bir sorgu veya işlem başlatmak için kullanılan bir tetikleyici kelimedir. Örneğin, "Ok Google" veya "Hey Google".
DSP özel kelime algılama
Android, AlwaysOnHotwordDetector
aracılığıyla DSP düzeyinde her zaman açık bir özel kelime algılayıcıya erişim sağlar.
düşük CPU kullanımıyla özel kelime algılama özelliğini uygulamanın en iyi yoludur. Bu işlevin kullanımı iki bölüme ayrılır:
- Bir
AlwaysOnHotwordDetector
örneği. - Özel kelime algılama ses modelinin kaydı.
VoiceInteractionService uygulaması, VoiceInteractionService#createAlwaysOnHotwordDetector()
kullanarak bir özel kelime algılayıcı oluşturabilir. Bu işlem için algılamada kullanmak istedikleri anahtar kelimeyi ve yerel ayarı iletirler. Sonuç olarak uygulama, aşağıdaki olası değerlerden birini içeren bir onAvailabilityChanged()
geri çağırma alır:
STATE_HARDWARE_UNAVAILABLE
. DSP özelliği cihazda kullanılamıyor. Bu durumda, yazılım özel kelime algılama özelliği kullanılır.STATE_HARDWARE_UNSUPPORTED
. DSP desteği genel olarak kullanılamaz ancak DSP, belirli anahtar kelime ve yerel ayar kombinasyonunu desteklemez. Uygulama, Yazılım Özel Kelime Algılama'yı kullanabilir.STATE_HARDWARE_ENROLLED
. Özel kelime algılama hazırdır vestartRecognition()
yöntemi çağrılarak başlatılabilir.STATE_HARDWARE_UNENROLLED
. İstenen anahtar kelime için ses modeli mevcut değil ancak kayıt yapılabilir.
Özel kelime algılama ses modellerinin kaydı IVoiceInteractionManagerService#updateKeyphraseSoundModel()
kullanılarak yapılabilir.
Belirli bir zamanda sisteme birden fazla model kaydedilebilir ancak bir AlwaysOnHotwordDetector
ile yalnızca bir model ilişkilendirilir.
DSP özel kelime algılama özelliği tüm cihazlarda kullanılamayabilir. VIA geliştiricileri, getDspModuleProperties()
yöntemini kullanarak donanım özelliklerini kontrol etmelidir. Ses modellerinin nasıl kaydedileceğini gösteren örnek kod için VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java
bölümüne bakın.
Eşzamanlı özel kelime tanıma ile ilgili olarak Eşzamanlı kayıt bölümüne bakın.
Yazılım özel kelime algılama
Yukarıda belirtildiği gibi, DSP anahtar kelime algılama tüm cihazlarda kullanılamayabilir (örneğin, Android emülatör DSP emülasyonu sağlamaz). Bu durumda, yazılım ses tanıma özelliği tek alternatiftir. Mikrofon erişimi gerekebilecek diğer uygulamaların çalışmasını engellememek için VIA'ların ses girişine şu yöntemleri kullanarak erişmesi gerekir:
- Ses kaydı için MediaRecorder.AudioSource.HOTWORD kullanılmalıdır.
android.Manifest.permission.CAPTURE_AUDIO_HOTWORD
iznini tutun.
Bu iki sabit değer de @hide
olup yalnızca paketlenmiş uygulamalar tarafından kullanılabilir.
Ses girişini ve ses tanımayı yönetme
Ses girişi, MediaRecorder sınıfı kullanılarak uygulanır.
Bu API'nin nasıl kullanılacağı hakkında daha fazla bilgi için MediaRecorder'a Genel Bakış başlıklı makaleyi inceleyin. Sesli etkileşim hizmetlerinin de RecognitionService
sınıf uygulamalarının olması beklenir. Sistemde ses tanıma gerektiren tüm uygulamalar bu özelliğe erişmek için bu izni kullanır. Ses tanıma işlemi yapmak ve mikrofona erişmek için VIA'ların android.permission.RECORD_AUDIO
değerini tutması gerekir.
RecognitionService
uygulamasına erişen uygulamaların da bu izne sahip olması gerekir.
Android 10'dan önce, mikrofon erişimi aynı anda yalnızca bir uygulamaya veriliyordu (anahtar kelime algılama hariç, yukarıdaki bölüme bakın). Android 10'dan itibaren mikrofon erişimi paylaşılabilir. Daha fazla bilgi için Ses Girişi Paylaşımı başlıklı makaleyi inceleyin.
Ses çıkışına erişim
VIA sözlü yanıt vermeye hazır olduğunda aşağıdaki yönergeleri uygulamanız önemlidir:
- Uygulama, ses odağını istediğinde veya ses çıkışını yönetirken ses özellikleri olarak
AudioAttributes#USAGE_ASSISTANT
veAudioAttributes#CONTENT_TYPE_SPEECH
kullanmalıdır. - Konuşma tanıma sırasında
AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
ile ses odak noktası istenmelidir. Bazı medya uygulamalarının, ses odak noktası kaldırılırken medya komutlarına düzgün şekilde yanıt vermeyebileceğini unutmayın (Medya Komutlarını Yerine Getirme bölümüne bakın).