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, uygulamaların ekran içeriklerini veya sesleri yakalamak için tek seferlik erişim sağlayan bir MediaProjection jetonu almasına olanak tanır. Android işletim sistemi, jetonu uygulamanıza vermeden önce kullanıcıdan izin ister.

İşletim sistemi, etkin MediaProjection jetonlarını Hızlı Ayarlar kullanıcı arayüzünde 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 geri çağırma kaydı yapın ve onStop yöntemi çağrıldığında kaydı durdurun.

Daha fazla bilgi için Medya yansıtma başlıklı makaleyi inceleyin.

Video çek

Media Projection API'yi kullanarak bir cihazın ekranını gerçek zamanlı olarak yakalayıp SurfaceView'da göstermeyi öğrenmek için ScreenCapture örnek uygulamasına bakın.

Ekran kaydını önlemek için DevicePolicyManager simgesini 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ı yakalama

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 akış 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ırlamalara tabidir. Bir uygulamanın ses kaydı yapabilmesi 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'ya 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ğine göre yakalamayı 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 yakalamayı kısıtlaması

Bir uygulamayı, diğer uygulamaların sesini yakalamasını engelleyecek şekilde yapılandırabilirsiniz. Bir uygulamadan gelen sesin kaydedilebilmesi için uygulamanın aşağıdaki koşulları karşılaması gerekir:

Kullanım

Sesi üreten oynatıcı, kullanımını USAGE_MEDIA, USAGE_GAME veya USAGE_UNKNOWN olarak ayarlamalıdır.

Yakalama politikası

Oyuncunun yakalama politikası, diğer uygulamaların oynatmayı yakalamasına izin veren AudioAttributes.ALLOW_CAPTURE_BY_ALL olmalıdır. Bu işlemi birkaç farklı şekilde yapabilirsiniz:

Bu ön koşullar karşılandığında, oynatıcı tarafından üretilen tüm sesler kaydedilebilir.

Sistem yakalamayı 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

Yakalama 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, manifest dosyasında 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" değerini ayarlarsa ancak medya oynatıcının AudioAttributes değerleri 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 herhangi bir uygulama yalnızca sistem yakalama yok
yanlış yalnızca sistem yalnızca sistem yakalama yok