Video ve ses oynatmayı yakalama

Bir uygulama, başka bir uygulamadan oynatılan videoyu veya sesi kaydedebilir. Bu tür uygulamalar, MediaProjection jetonunu doğru şekilde işlemelidir. Bu sayfada bunun 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ğini ve bir ses uygulamasının diğer uygulamaların çaldığı içeriği kaydetmesini nasıl engelleyebileceğini de gösterir.

MediaProjection jetonu nasıl kullanılır?

MediaProjection API'si, uygulamaların ekran içeriğini veya sesi yakalamak için tek seferlik erişim sağlayan bir MediaProjection jetonu edinmesine olanak tanır. Android OS, jetonu uygulamanıza vermeden önce kullanıcıdan izin ister.

OS, etkin MediaProjection jetonlarını Hızlı Ayarlar kullanıcı arayüzünde gösterir ve kullanıcıların istedikleri zaman jetonlara erişimi iptal etmelerine olanak tanır. Bu durumda, oturumla ilişkili sanal ekranlar veya ses akışları medya akışlarını almayı durdurur. Uygulamanız uygun şekilde yanıt vermelidir. Aksi takdirde sessiz veya siyah video akışı kaydetmeye devam eder.

Jeton kaybını işlemek için registerCallback yöntemini kullanarak MediaProjection örneğine geri çağırma işlevi kaydedin ve onStop yöntemi çağrıldığında kaydı durdurun.

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

Video çek

Bir cihazın ekranını anlık olarak yakalamak ve SurfaceView'da göstermek için MediaProjection API'yi nasıl kullanacağınızı öğrenmek üzere ScreenCapture örnek uygulamasına bakın.

Ekran kaydını önlemek için DevicePolicyManager simgesini kullanabilirsiniz. Kurumsal hesaplar (Android for Work) için yönetici, setScreenCaptureDisabled yöntemini kullanarak iş profili için asistan verilerinin toplanmasını devre dışı bırakabilir.

Uygulama Olmadan Android Cihazları Yönetme kod laboratuvarında ekran görüntülerinin nasıl yasaklanacağı gösterilmektedir.

Ses oynatmayı yakalama

AudioPlaybackCapture API, Android 10'da kullanıma sunulmuştur. Bu API, uygulamalara diğer uygulamalar tarafından çalınan sesi kopyalama olanağı sunar. Bu özellik, ekran görüntülemenin ses için olan eşdeğeridir. Bu API'nin birincil kullanım alanı, oyunlarda çalınan sesleri yakalamak 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 kaydı bazı sınırlamalara tabidir. Ses kaydı yapabilmek için uygulamaların aşağıdaki koşulları karşılaması gerekir:

Başka bir uygulamadan ses yakalamak için uygulamanızın bir AudioRecord nesnesi oluşturması ve buna bir AudioPlaybackCaptureConfiguration eklemesi gerekir. Şu adımları uygulayın:

  1. AudioPlaybackCaptureConfiguration oluşturmak için AudioPlaybackCaptureConfiguration.Builder.build() numaralı telefonu arayın.
  2. setAudioPlaybackCaptureConfig işlevini çağırarak yapılandırmayı AudioRecord'e iletin.

Ses kaydını kontrol etme

Uygulamanız, hangi içerik türlerini kaydedebileceğini ve hangi diğer uygulama türlerinin kendi oynatma işlemini 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. Benzer şekilde, addMatchingUid() ve excludeUid()'yi aynı anda kullanamazsınız.

Diğer uygulamalar tarafından yakalamayı kısıtlama

Bir uygulamayı, diğer uygulamaların sesini yakalamasını engelleyecek şekilde yapılandırabilirsiniz. Bir uygulamadan gelen ses yalnızca uygulama şu 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 yakalama politikası AudioAttributes.ALLOW_CAPTURE_BY_ALL olmalıdır. Bu politika, diğer uygulamaların oynatmayı yakalamasına izin verir. Bunu birkaç farklı şekilde yapabilirsiniz:

Bu ön koşullar karşılanırsa oynatıcı tarafından üretilen tüm sesler yakalanabilir.

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 varsayılan olarak oynatmayı yakalayabilir. Bu bileşenlerin çoğu Android tedarikçileri tarafından özelleştirilir ve erişilebilirlik ve altyazı gibi özellikleri destekler. Bu nedenle, uygulamaların oynatma işlemini sistemin yakalamasına izin vermesi önerilir. Sistemin uygulamanızın oynatmasını 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() işlevini çağırabilirsiniz. Yöntemi çağırdığınız sırada bir MediaPlayer veya AudioTrack çalmaktaysa 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 belirtilebileceğinden, geçerli politikanın nasıl belirlendiğini anlamak önemlidir. En kısıtlayıcı yakalama politikası her zaman uygulanır. Örneğin, manifest dosyasında setAllowedCapturePolicy="false" bulunan bir uygulama, AudioManager#setAllowedCapturePolicy ALLOW_CAPTURE_BY_ALL olarak ayarlanmış olsa bile sistem dışı uygulamaların sesini yakalamasına hiçbir zaman izin vermez. Benzer şekilde, AudioManager#setAllowedCapturePolicy ALLOW_CAPTURE_BY_ALL olarak ayarlanmışsa ve manifest setAllowedCapturePolicy="true" olarak ayarlanmışsa ancak medya oynatıcının AudioAttributes AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM) ile oluşturulmuşsa bu medya oynatıcı, sistem dışı uygulamalar tarafından yakalanamaz.

Aşağıdaki tabloda manifest özelliğinin ve geçerli politikanın etkisi özetlenmiştir:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
doğru herhangi bir uygulama yalnızca sistem no capture
yanlış yalnızca sistem yalnızca sistem no capture