Video ve ses oynatmayı yakalama

Bir uygulama, başka bir uygulamadan oynatılan video 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ülerini kaydetme özelliğini nasıl devre dışı bırakabileceğini ve bir ses uygulamasının oynattığı içeriği diğer uygulamaların kaydetmesini nasıl engelleyebileceğini de gösterir.

MediaProjection jetonu kullanma

MediaProjection API, uygulamaların bir MediaProjection jetonu edinmesine izin verir. Bu jeton, ekran içeriklerini veya sesi yakalamak için uygulamalara tek seferlik erişim izni verir. Android OS, jetonu uygulamanıza vermeden önce kullanıcıdan izin ister.

OS, Hızlı Ayarlar kullanıcı arayüzünde etkin MediaProjection jetonlarını gösterir ve kullanıcıların bir jetona erişimi istedikleri zaman geri çekmelerine 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 ses veya siyah video akışı kaydetmeye devam eder.

Jeton kaybını ele almak için registerCallback yöntemini kullanarak MediaProjection örneğinde bir geri çağırma kaydedin ve onStop yöntemi çağrıldığında kaydı durdurun.

Daha fazla bilgi için Medya projeksiyonu konusuna bakın.

Video çek

Bir cihazın ekranını gerçek zamanlı olarak yakalamak ve bunu bir SurfaceView'da göstermek amacıyla Media Projection API'yi nasıl kullanacağınızı öğrenmek için Ekran Yakalama örnek uygulamasına bakın.

Ekran kaydedilmesini engellemek için DevicePolicyManager 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 çalmayı kaydet

AudioPlaybackCapture API, Android 10'da kullanıma sunulmuştur. Bu API, uygulamaların diğer uygulamalar tarafından çalınan sesi kopyalamasına imkan tanır. Bu özellik, ekran görüntüsü yakalamaya benzer ancak ses içindir. Birincil kullanım alanı, oyunların çaldığı sesi yakalamak isteyen yayın uygulamaları içindir.

AudioPlaybackCapture API'nin, sesi kaydedilen uygulamanın gecikmesini etkilemediğini unutmayın.

Yakalama uygulaması oluşturma

Güvenlik ve gizlilik nedeniyle oynatma kaydı, güvenlik ve gizlilik nedeniyle bazı sınırlamalara tabidir. Uygulamaların ses yakalayabilmesi için şu gereksinimleri karşılaması gerekir:

Başka bir uygulamadan ses yakalamak için uygulamanızın bir AudioRecord nesnesi derlemesi 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 yöntemini çağırarak yapılandırmayı AudioRecord öğesine iletin.

Ses kaydını denetleme

Uygulamanız ne tür içerikleri kaydedebileceğini ve diğer hangi tür uygulamaların kendi oynatımını kaydedebileceğini kontrol edebilir.

Ses içeriğiyle yakalamayı kısıtlama

Bir uygulama aşağıdaki yöntemleri kullanarak yakalayabileceği sesi sınırlayabilir:

addMatchingUsage() ve excludeUsage() yöntemlerini birlikte kullanamayacağınızı unutmayın. İkisinden birini seçmeniz gerekir. Benzer bir şekilde, addMatchingUid() ve excludeUid() özelliklerini 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 uygulamanın aşağıdaki gereksinimleri karşılaması durumunda 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ı, diğer uygulamaların oynatmayı yakalamasına izin veren AudioAttributes.ALLOW_CAPTURE_BY_ALL olmalıdır. Bunu yapmanın pek çok yolu vardır:

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 birçoğu Android satıcıları tarafından özelleştirilmiştir ve erişilebilirlik ile altyazı gibi özellikleri destekler. Bu nedenle, uygulamaların oynatma bilgilerini sisteme kaydetmesine izin vermesi önerilir. Nadiren de olsa sistemin, uygulamanızın oynatılmasını yakalamasını istemediğiniz 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() yöntemini çağırabilirsiniz. Yöntemi çağırdığınızda bir MediaPlayer veya AudioTrack çalıyorsa ses etkilenmez. Politika değişikliğinin geçerli olması için oynatıcıyı ya da kanalı 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ı setAllowedCapturePolicy="false" içeren bir uygulama, AudioManager#setAllowedCapturePolicy değeri 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 ayarlandıysa ve manifest setAllowedCapturePolicy="true" olarak ayarlıysa ancak medya oynatıcının AudioAttributes öğesi 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ği ve geçerli politikanın etkisi özetlenmiştir:

izin vermeSesÇalmaYakalama ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true herhangi bir uygulama yalnızca sistem yakalama yok
false yalnızca sistem yalnızca sistem yakalama yok