Video ve ses oynatmayı yakalama

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:

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:

  1. AudioPlaybackCaptureConfiguration.Builder.build() numaralı telefonu arayarak AudioPlaybackCaptureConfiguration oluşturun.
  2. setAudioPlaybackCaptureConfig iş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:

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:

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