Sesli Etkileşim Uygulaması (VIA) uygulamak için aşağıdaki adımları tamamlayın:
- VIA iskeleti oluşturun.
- (İsteğe bağlı) Kurulum/oturum açma akışı uygulayın.
- (İsteğe bağlı) Ayarlar ekranı uygulayın.
- Manifest dosyasında gerekli izinleri beyan edin.
- Ses plakası kullanıcı arayüzü uygulayın.
- Ses tanımayı uygulayın (RecognitionService API uygulaması dahil olmalıdır).
- İfadeyi uygulayın (isteğe bağlı olarak TextToSpeech API'yi uygulayabilirsiniz).
- Komut karşılama özelliğini uygulayın. Bu içeriği Fulfilling Commands (Komutları Yerine Getirme) bölümünde bulabilirsiniz.
Aşağıdaki bölümlerde, yukarıda belirtilen adımların nasıl tamamlanacağı açıklanmaktadır.
VIA iskeleti oluşturma
Manifestler
Aşağıdaki bilgiler manifeste dahil edildiğinde bir uygulama, Sesli Etkileşim özelliği olan bir uygulama 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,
VoiceInteractionServiceişlevini genişleten bir hizmet sunmalı veVoiceInteractionService.SERVICE_INTERFACE ("android.service.voice.VoiceInteractionService")işlemi için bir amaç filtresi içermelidir. - Bu hizmetin
BIND_VOICE_INTERACTIONsistem imzası izni olmalıdır. - Bu hizmet, aşağıdakileri içeren bir
android.voice_interactionmeta 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 aynı zamanda ses tanıma hizmetleri olduğundan manifestinize 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 gerekir:
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 şemada 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, VIA'ya 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 bildirir (bkz. Sesli Asistan'da Dokunarak Okuma).
- Kilit ekranından (keyguard) sesli etkileşim oturumları başlatma.
En basit haliyle, VoiceInteractionService uygulaması şu şekilde 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; } ... }
Sesli Asistan'ın dokunarak okuma özelliğini kullanmak için VoiceInteractionService#onGetSupportedVoiceActions()'nın uygulanması gerekir.
VoiceInteractionSessionService, sistem tarafından VoiceInteractionSession oluşturmak ve bu oturumla etkileşimde bulunmak için kullanılır. Bu hizmetin 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 büyük bir kısmı VoiceInteractionSession'da yapılır. Tek bir oturum örneği, birden fazla kullanıcı etkileşimini tamamlamak için yeniden kullanılabilir. AAOS'te, otomotivlere özgü işlevlerin bir kısmının uygulanmasına yardımcı olan bir yardımcı CarVoiceInteractionSession bulunur.
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. Yöntemlerin tam listesi için VoiceInteractionSession dokümanlarına bakın.
Kurulum/oturum açma akışı uygulama
Kurulum ve oturum açma işlemleri şu durumlarda yapılabilir:
- Cihazın ilk kurulumu sırasında (Kurulum Sihirbazı).
- Sesli etkileşim sırasında hizmet değiştirme (Ayarlar).
- Uygulama ilk kez seçildiğinde başlatılır.
Önerilen kullanıcı deneyimi ve görsel rehberlik hakkında ayrıntılı bilgi için Önceden Yüklenmiş Asistanlar: Kullanıcı Deneyimi Rehberi başlıklı makaleyi inceleyin.
Ses hizmeti değiştirilirken kurulum
Kullanıcı, her zaman düzgün şekilde yapılandırılmamış bir VIA seçebilir. 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 katılımı sırasında yapılandırılan VIA'dan farklı bir VIA seçti.
Her durumda, VoiceInteractionService, kullanıcının kurulumu tamamlamasını teşvik etmek için çeşitli yöntemler kullanabilir:
- Bildirim hatırlatıcısı.
- Kullanıcı özelliği kullanmaya çalıştığında otomatik sesli yanıt.
Not: Açık bir kullanıcı isteği olmadan VIA kurulum akışı sunmanız kesinlikle önerilmez. Bu nedenle, VIAs'lar cihaz başlatılırken veya kullanıcı geçişi ya da cihaz kilidinin açılması sonucunda HU'da içeriği otomatik olarak göstermemelidir.
Bildirim hatırlatıcısı
Bildirim hatırlatıcısı, kurulum ihtiyacını belirtmenin ve kullanıcılara asistan kurulum akışına gitme olanağı sunmanın rahatsız etmeyen bir yoludur.

Şekil 2. Bildirim hatırlatıcısı
Bu akışın işleyiş şekli:

Şekil 3. Bildirim hatırlatma akışı
Sesli yanıt
Bu, uygulanması en basit akıştır. VoiceInteractionSession#onShow() geri çağırmasında bir ifade başlatılır, kullanıcıya ne yapılması gerektiği açıklanır ve ardından (kullanıcı deneyimi kısıtlama durumu kurulumun yapılmasına izin veriyorsa) kurulum akışını başlatmak isteyip istemediği sorulur. Kurulum o sırada mümkün değilse bu durumu da açıklayın.
İlk kullanımda kurulum
Kullanıcının, düzgün şekilde yapılandırılmamış bir VIA'yı tetiklemesi her zaman mümkündür. Bu gibi durumlarda:
- Kullanıcıyı bu durum hakkında sözlü olarak bilgilendirin (örneğin, "Düzgün çalışabilmem için birkaç adımı tamamlamanız gerekiyor… ").
- Kullanıcı deneyimi kısıtlamaları motoru izin veriyorsa (UX_RESTRICTIONS_NO_SETUP bölümüne bakın) kullanıcıya kurulum sürecini başlatmak isteyip istemediğini sorun ve ardından VIA için Ayarlar ekranını açın.
- Aksi takdirde (örneğin, kullanıcı araç kullanıyorsa) kullanıcıya, güvenli olduğunda seçeneği tıklaması için 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 Rehberliği bölümündeki kullanıcı arayüzü geliştirme ile ilgili kullanıcı deneyimi ve görsel yönergelere bakın.
Genel yönergeler:
- VIA'lar, kullanıcıların kurulumu istedikleri zaman durdurup devam ettirmelerine olanak tanımalıdır.
UX_RESTRICTIONS_NO_SETUPkısıtlaması etkinken kuruluma izin verilmemelidir. Ayrıntılar için Sürücü Dikkatini Dağıtma Yönergeleri başlıklı makaleyi inceleyin.- Kurulum ekranları, her araç için 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ünü inceleyin.
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 (bkz. Manifestler).
Ayarlar bölümü, kurulum ve oturum açma işlemine devam etmek (kullanıcı işlemi tamamlamadıysa) veya gerekirse oturumu 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. Araç Ayarları) dönme seçeneği sunun.
- Sürüş sırasında kullanılmasına izin verilmez. Ayrıntılar için Sürücü Dikkatini Dağıtma Yönergeleri başlıklı makaleyi inceleyin.
- Her bir araç tasarım sistemini eşleştirin. Ayrıntılar için Özelleştirme bölümünü inceleyin.
Manifest dosyasında gerekli izinleri bildirin
VIA'nın gerektirdiği izinler üç kategoriye ayrılabilir:
- Sistem imzası izinleri. Bunlar yalnızca önceden yüklenmiş, sistem tarafından imzalanmış APK'lara verilen izinlerdir. Kullanıcılar bu izinleri veremez. Yalnızca OEM'ler sistem görüntülerini oluştururken bu izinleri verebilir. İmza izinleri alma hakkında daha fazla bilgi için Sisteme ayrıcalıklı izinler 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 değer cihazdan cihaza değişebileceğinden uygulamalar gerektiğinde bu izinleri isteyebilmelidir.
- Diğer izinler. Bunlar, kullanıcı müdahalesi gerektirmeyen diğer tüm izinlerdir. Bu izinler sistem tarafından otomatik olarak verilir.
Yukarıda belirtilenler göz önüne alındığında, aşağıdaki bölümde yalnızca tehlikeli izinler istenmesi ele alınmaktadır. İzinler yalnızca kullanıcı oturum açma veya ayar ekranlarındayken istenmelidir.
Uygulamanın çalışması için gerekli izinler yoksa kullanıcıya durumu açıklamak için sesli ifade kullanılması ve kullanıcının VIA ayarları ekranlarına geri dönmek için kullanabileceği bir fırsat sunmak üzere bildirim gönderilmesi önerilir. Ayrıntılar için 1. Bildirim hatırlatıcısı.
Ayarlar ekranında izin isteme
Tehlikeli izinler, normal ActivityCompat#requestPermission() yöntemi (veya eşdeğeri) kullanılarak isteniyor. İzin isteme hakkında ayrıntılı bilgi için Uygulama İzinleri İsteme başlıklı makaleyi inceleyin.

Şekil 5. İzin iste
Bildirim dinleyici izni
TTR akışını uygulamak için VIA'ların bildirim dinleyici olarak belirlenmesi gerekir. Bu, izin olarak değerlendirilmez. Bunun yerine, sistemin kayıtlı dinleyicilere bildirim göndermesine olanak tanıyan bir yapılandırmadır. VIA'nın bu bilgilere erişim izni verilip verilmediğini öğrenmek için uygulamalar:
- (İsteğe bağlı)
CarAssistUtils#assistantIsNotificationListener()kullanarak önceden bildirim dinleyicileri olup olmadığını kontrol edin. Örneğin, bu işlem kurulum akışı sırasında yapılabilir. - (Zorunlu)
CarVoiceInteractionSession#onShow()ile ilgili işlem yapmayaVOICE_ACTION_HANDLE_EXCEPTIONişlemi veEXCEPTION_NOTIFICATION_LISTENER_PERMISSIONS_MISSINGistisnasıyla tepki verin.
Bu erişim önceden verilmemişse VIA, kullanıcının araba ayarlarının Bildirim Erişimi bölümüne gitmesini sağlamak için hem sözlü ifadeler hem de bildirimler kullanmalıdır. Aşağıdaki kod, ayarlar uygulamasının uygun 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);
}Ses plakası kullanıcı arayüzü uygulama
Bir VoiceInteractionSession, onShow() geri araması aldığında ses plakası kullanıcı arayüzü gösterebilir. Ses plakası uygulamasıyla ilgili görsel ve kullanıcı deneyimi kuralları için Önceden Yüklenmiş Asistanlar: Kullanıcı Deneyimi Kılavuzu'na bakın.

Şekil 6. Ses plakasını gösterme
Bu kullanıcı arayüzünü uygulamanın iki yolu vardır:
- Geçersiz kıl:
VoiceInteractionSession#onCreateContentView() VoiceInteractionSession#startAssistantActivity()kullanarak etkinlik başlatma
onCreateContentView() işlevini kullanma
Bu, ses plakasını sunmanın varsayılan yoludur. VoiceInteractionSession
Temel sınıf, bir pencere oluşturur ve ses oturumu devam ettiği sürece pencerenin yaşam döngüsünü yönetir. Uygulamalar, VoiceInteractionSession#onCreateContentView() işlevini geçersiz kılmalı ve oturum oluşturulur oluşturulmaz bu pencereye eklenmiş 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() üzerinde görünür hale gelmeli, ardından VoiceInteractionSession#onHide() üzerinde tekrar görünmez hale gelmelidir.
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 gizlenmiş bölgelerini hesaba katmak için VoiceInteractionSession#onComputeInsets() değerini ayarlamanız gerekebilir.
startAssistantActivity() işlevini kullanma
Bu durumda, VoiceInteractionSession ses plakası kullanıcı arayüzünün işlenmesini normal bir etkinliğe devreder. Bu seçenek kullanıldığında, VoiceInteractionSession
uygulaması onPrepareShow()
geri çağırma işleminde varsayılan içerik penceresinin oluşturulmasını devre dışı bırakmalıdır (bkz. onCreateContentView() kullanma). VoiceInteractionSession#onShow() zamanında oturum, VoiceInteractionSession#startAssistantActivity() kullanılarak sesli dikte etkinliğini başlatır. Bu yöntem, kullanıcı arayüzünü uygun pencere ayarları 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şimin sürdürülmesi için bir dizi dahili amaç veya hizmet bağlama gerekebilir. Örneğin, VoiceInteractionSession#onHide() çağrıldığında oturum, bu isteği etkinliğe iletebilmelidir.
Önemli. Otomotiv'de, sürüş sırasında yalnızca özel olarak açıklama eklenmiş etkinlikler veya UXR "izin verilenler listesinde" yer alan etkinlikler gösterilebilir. Bu durum, VoiceInteractionSession#startAssistantActivity() ile başlatılan etkinlikler için de geçerlidir. Etkinliğinize <meta-data
android:name="distractionOptimized" android:value="true"/> ile açıklama eklemeyi veya bu etkinliği /packages/services/Car/service/res/values/config.xml dosyasının systemActivityWhitelist anahtarına dahil etmeyi unutmayın. Daha fazla bilgi için Sürücü Dikkatini Dağıtma Kuralları'nı inceleyin.
Ses tanımayı uygulama
Bu bölümde, etkin kelimelerin algılanması ve tanınması yoluyla ses tanımayı nasıl uygulayacağınızı öğreneceksiniz. Etkinleştirme kelimesi, sesle yeni bir sorgu veya işlem başlatmak için kullanılan tetikleyici bir kelimedir. Örneğin, "Ok Google" veya "Hey Google".
TTP özel kelime algılama
Android, AlwaysOnHotwordDetector aracılığıyla DSP düzeyinde her zaman açık özel kelime dedektörüne erişim sağlar.
düşük CPU ile özel kelime algılamayı uygulama Bu işlevin kullanımı iki bölüme ayrılır:
AlwaysOnHotwordDetectorörneklendirmesi.- Özel kelime algılama ses modelinin kaydedilmesi.
VoiceInteractionService uygulaması, VoiceInteractionService#createAlwaysOnHotwordDetector() kullanarak bir hazır kelime dedektörü oluşturabilir.VoiceInteractionService#createAlwaysOnHotwordDetector(), algılama için kullanmak istedikleri bir anahtar kelime öbeği ve yerel ayarı iletir. 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ılamaz. Bu durumda, yazılım özel kelime algılama özelliği kullanılır.STATE_HARDWARE_UNSUPPORTED. TTP desteği genel olarak kullanılamaz ancak TTP, belirli anahtar kelime öbeği ve yerel ayar kombinasyonunu desteklemez. Uygulama, Yazılımla Özel Kelime Algılama'yı kullanmayı tercih edebilir.STATE_HARDWARE_ENROLLED. Özel kelime algılama özelliği hazır vestartRecognition()yöntemi çağrılarak başlatılabilir.STATE_HARDWARE_UNENROLLED. İstenen anahtar kelime öbeği için ses modeli mevcut değil ancak kayıt mümkün.
Özel kelime algılama ses modellerinin kaydı IVoiceInteractionManagerService#updateKeyphraseSoundModel() kullanılarak yapılabilir.
Sisteme belirli bir zamanda birden fazla model kaydedilebilir ancak bir AlwaysOnHotwordDetector ile yalnızca bir model ilişkilendirilir.
DSP özel kelime saptama ö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.
Aynı anda etkin kelime tanıma ile ilgili olarak Eşzamanlı yakalama konusuna bakın.
Yazılım özel kelime algılama
Yukarıda belirtildiği gibi, DSP sıcak kelime algılama özelliği tüm cihazlarda kullanılamayabilir (örneğin, Android emülatöründe DSP emülasyonu sağlanmaz). Bu durumda, tek alternatif yazılım ses tanımadır. Mikrofona erişmesi gerekebilecek diğer uygulamalara müdahale etmemek için VIA'lar ses girişine aşağıdaki yöntemlerle erişmelidir:
- Ses kaydı için MediaRecorder.AudioSource.HOTWORD kullanılmalıdır.
android.Manifest.permission.CAPTURE_AUDIO_HOTWORDiznini elinde bulundurmalıdır.
Bu sabitlerin ikisi de @hide ve yalnızca paketlenmiş uygulamalarda 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ı olması beklenir. Sistemdeki ses tanıma gerektiren tüm uygulamalar bu özelliğe erişmek için kullanır. Ses tanıma ve mikrofona erişim için VIA'lar android.permission.RECORD_AUDIO tutmalıdır.
RecognitionService uygulamasına erişen uygulamaların da bu izne sahip olması beklenir.
Android 10'dan önce, mikrofon erişimi yalnızca bir uygulamaya veriliyordu (etkin kelime algılama hariç, yukarıya bakın). Android 10'dan itibaren, mikrofon erişimi paylaşılabilir. Daha fazla bilgi için Ses Girişini Paylaşma başlıklı makaleyi inceleyin.
Ses çıkışına erişme
VIA sözlü yanıt vermeye hazır olduğunda aşağıdaki kurallara uymanız önemlidir:
- Uygulama, ses odağı isterken veya ses çıkışını yönetirken ses özellikleri olarak
AudioAttributes#USAGE_ASSISTANTveAudioAttributes#CONTENT_TYPE_SPEECHkullanmalıdır. - Konuşma tanıma sırasında ses odağı
AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVEile istenmelidir. Ses odakları kaldırıldığında bazı medya uygulamalarının medya komutlarına düzgün yanıt vermeyebileceğini unutmayın (Medya Komutlarını Yerine Getirme bölümüne bakın).