Bir uygulama, başka bir uygulamada oynatılan videoyu veya sesi kaydedebilir. Bu tür uygulamalar, MediaProjection jetonunu doğru şekilde işlemelidir. Bu sayfada nasıl yapılacağı açıklanmaktadır. Ayrıca, bir cihaz yöneticisinin ekran görüntüsü kaydetme özelliğini nasıl devre dışı bırakabileceği ve bir ses uygulamasının, diğer uygulamaların oynattığı içeriği kaydetmesini nasıl engelleyebileceği de gösterilmektedir.
MediaProjection jetonunu kullanma
MediaProjection API'si, uygulamaların ekran içeriklerini veya sesi yakalamak için tek seferlik erişim izni veren bir MediaProjection jetonu almasına olanak tanır. Android OS, jetonu uygulamanıza vermeden önce kullanıcıdan izin ister.
İşletim sistemi, Hızlı Ayarlar kullanıcı arayüzünde etkin MediaProjection jetonlarını gösterir ve kullanıcıların jeton erişimini istedikleri zaman iptal etmelerine olanak tanır. Bu durumda, oturumla ilişkili sanal ekranlar veya ses akışları medya akışı almayı durdurur. Uygulamanız uygun şekilde yanıt vermelidir. Aksi takdirde, sessizliği veya siyah bir video akışını kaydetmeye devam eder.
Jeton kaybını işlemek için MediaProjection örneğinde registerCallback yöntemini kullanarak bir geri çağırma kaydettirin ve onStop yöntemi çağrıldığında kaydı durdurun.
Daha fazla bilgi için Medya projeksiyonu başlıklı makaleyi inceleyin.
Video çek
Ekran kaydını önlemek için DevicePolicyManager yönergesini kullanabilirsiniz. Kurumsal hesaplarda (Android for Work) yönetici, setScreenCaptureDisabled yöntemini kullanarak iş profili için asistan verilerinin toplanmasını devre dışı bırakabilir.
Uygulama Olmadan Android Cihazları Yönetme adlı codelab'de ekran görüntülerinin nasıl yasaklanacağı gösterilmektedir.
Ses oynatmayı kaydetme
AudioPlaybackCapture API, Android 10'da kullanıma sunuldu. Bu API, uygulamalara diğer uygulamalar tarafından oynatılan sesleri kopyalama olanağı tanır. Bu özellik, ekran görüntüsünün ses için olan karşılığıdır. Birincil kullanım alanı, oyunlarda çalınan sesleri kaydetmek isteyen yayın uygulamalarıdır.
AudioPlaybackCapture API'nin, sesi yakalanan uygulamanın gecikmesini etkilemediğini unutmayın.
Yakalama uygulaması oluşturma
Güvenlik ve gizlilik nedeniyle, oynatma yakalama özelliği bazı sınırlamalar getirir. Bir uygulamanın ses yakalayabilmesi için aşağıdaki koşulları karşılaması gerekir:
- Uygulamada
RECORD_AUDIOizni olmalıdır. - Uygulama,
MediaProjectionManager.createScreenCaptureIntent()tarafından gösterilen istemi göstermeli ve kullanıcı bunu onaylamalıdır. - Kaydetme ve oynatma uygulamaları aynı kullanıcı profilinde olmalıdır.
Başka bir uygulamadan ses yakalamak için uygulamanız bir AudioRecord nesnesi oluşturmalı ve bu nesneye bir AudioPlaybackCaptureConfiguration eklemelidir. Şu adımları uygulayın:
AudioPlaybackCaptureConfiguration.Builder.build()numaralı telefonu arayarakAudioPlaybackCaptureConfigurationoluşturun.setAudioPlaybackCaptureConfigişlevini çağırarak yapılandırmayıAudioRecordöğesine iletin.
Ses kaydını kontrol etme
Uygulamanız, hangi içerik türlerini kaydedebileceğini ve hangi tür uygulamaların kendi oynatma işlemlerini kaydedebileceğini kontrol edebilir.
Ses içeriğiyle kaydı kısıtlama
Uygulamalar, aşağıdaki yöntemleri kullanarak hangi sesleri yakalayabileceğini sınırlayabilir:
- Belirli bir kullanımın yakalanmasına izin vermek için
AUDIO_USAGEöğesini AudioPlaybackCaptureConfiguration.Builder.addMatchingUsage()'a iletin. Birden fazla kullanım belirtmek için yöntemi birden çok kez çağırın. - Kullanımın yakalanmasını engellemek için AudioPlaybackCaptureConfiguration.excludeUsage() işlevine bir
AUDIO_USAGEiletin. Birden fazla kullanım belirtmek için yöntemi birden çok kez çağırın. - Yalnızca belirli bir UID'ye sahip uygulamaları yakalamak için AudioPlaybackCaptureConfiguration.addMatchingUid() işlevine bir UID iletin. Birden fazla UID belirtmek için yöntemi birden çok kez çağırın.
- Bu UID'nin yakalanmasını yasaklamak için AudioPlaybackCaptureConfiguration.excludeUid()'ye bir UID iletin. Birden fazla UID belirtmek için yöntemi birden çok kez çağırın.
addMatchingUsage() ve excludeUsage() yöntemlerini birlikte kullanamayacağınızı unutmayın. İkisinden birini seçmeniz gerekir. Aynı şekilde, addMatchingUid() ve excludeUid() öğelerini aynı anda kullanamazsınız.
Diğer uygulamaların yakalama işlemini kısıtlama
Bir uygulamayı, diğer uygulamaların sesini yakalamasını engelleyecek şekilde yapılandırabilirsiniz. Bir uygulamadan gelen ses, yalnızca uygulama aşağıdaki koşulları karşılıyorsa yakalanabilir:
Kullanım
Sesi üreten oynatıcı, kullanımını
USAGE_MEDIA, USAGE_GAME veya
USAGE_UNKNOWN olarak ayarlamalıdır.
Yakalama politikası
Oynatıcının kayıt politikası, diğer uygulamaların oynatmayı kaydetmesine izin veren AudioAttributes.ALLOW_CAPTURE_BY_ALL olmalıdır. Bu işlem birkaç şekilde yapılabilir:
- Tüm oynatıcılarda yakalamayı etkinleştirmek için uygulamanın
android:allowAudioPlaybackCapture="true"dosyasınamanifest.xmlekleyin. AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)işlevini çağırarak tüm oynatıcılarda yakalamayı da etkinleştirebilirsiniz.- Politikayı
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)kullanarak oluşturduğunuzda tek bir oyuncu için ayarlayabilirsiniz. (AAudiogörüşmesiAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)özelliğini kullanıyorsanız.)
Bu ön koşullar karşılanırsa oyuncu tarafından üretilen tüm sesler yakalanabilir.
Sistem kaydını devre dışı bırakma
Yukarıda açıklanan yakalamaya izin veren korumalar yalnızca uygulamalar için geçerlidir. Android sistem bileşenleri, oynatmayı varsayılan olarak yakalayabilir.
Bu bileşenlerin çoğu Android satıcıları tarafından özelleştirilir ve erişilebilirlik ile altyazı gibi özellikleri destekler. Bu nedenle, uygulamaların sistemin oynatma işlemlerini yakalamasına izin vermesi önerilir. Sistemin uygulamanızın oynatma işlemlerini yakalamasını istemediğiniz nadir durumlarda yakalama politikasını ALLOW_CAPTURE_BY_NONE olarak ayarlayın.
Çalışma zamanında politika ayarlama
Bir uygulama çalışırken yakalama politikasını değiştirmek için AudioManager.setAllowedCapturePolicy() numaralı telefonu arayabilirsiniz. Yöntemi çağırdığınızda bir MediaPlayer veya AudioTrack oynatılıyorsa ses etkilenmez. Politika değişikliğinin geçerli olması için oynatıcıyı veya parçayı kapatıp yeniden açmanız gerekir.
Politika = manifest + AudioManager + AudioAttributes
Kaydetme politikası birkaç yerde belirtilebildiğinden, geçerli politikanın nasıl belirlendiğini anlamak önemlidir.
Her zaman en kısıtlayıcı yakalama politikası uygulanır. Örneğin, manifestinde setAllowedCapturePolicy="false" bulunan bir uygulama, AudioManager#setAllowedCapturePolicy değeri ALLOW_CAPTURE_BY_ALL olarak ayarlanmış olsa bile sistem dışı uygulamaların sesini yakalamasına asla izin vermez. Benzer şekilde, AudioManager#setAllowedCapturePolicy, ALLOW_CAPTURE_BY_ALL olarak ayarlanırsa ve manifest setAllowedCapturePolicy="true" olarak ayarlanırsa ancak medya oynatıcının AudioAttributes öğeleri AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM) ile oluşturulursa bu medya oynatıcı, sistem dışı uygulamalar tarafından yakalanamaz.
Aşağıdaki tabloda, manifest özelliğinin ve geçerli politikanın etkisi özetlenmektedir:
| allowAudioPlaybackCapture | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
|---|---|---|---|
| doğru | tüm uygulamalar | yalnızca sistem | yakalama yok |
| yanlış | yalnızca sistem | yalnızca sistem | yakalama yok |