Video ve ses oynatmayı yakalama

Bir uygulama, başka bir uygulamadan oynatılan videoyu veya sesi kaydedebilir. Bu tür uygulamaların MediaProjection jeton sağlayabilir. Bu sayfada bunun nasıl yapılacağı açıklanmaktadır. Ayrıca, cihaz yöneticisinin nasıl devre dışı bırakabileceği de gösterilir. ekran görüntülerini kaydetme imkanı ve ses uygulamasının bu durumu diğer uygulamaların oynattığı içeriği kaydetmesine engel olur.

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.

İşletim sistemi, 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 etmesine 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ı yönetmek için MediaProjection öğesinde bir geri çağırma kaydedin kullanılan örnek bir registerCallback yöntemini kullanın ve onStop yöntemi çağrılır.

Daha fazla bilgi için Medya projeksiyonu bölümüne bakın.

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.

Şunu kullanabilirsiniz: DevicePolicyManager engelleyebilirsiniz. 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.

Codelab Uygulama Kullanmadan Android Cihazları Yönetme ekran görüntülerinin nasıl yasaklanacağını gösterir.

Ses oynatmayı yakalama

AudioPlaybackCapture API, Android 10'da kullanıma sunulmuştur. Bu API uygulamaların, diğer uygulamalar tarafından çalınan sesi kopyalamasına olanak tanır. Bu özelliği, ekran görüntüsüne benzer, ancak işitseldir. Birincil kullanım alanı 'i kullanın.

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

Yakalama uygulaması oluşturma

Oynatma yakalama, güvenlik ve gizlilik açısından bazı sınırlamalar uygular. 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 AudioRecord nesne ve bir AudioPlaybackCaptureConfiguration . Ş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 yakalamayı kontrol etme

Uygulamanız ne tür içerikleri kaydedebileceğini ve diğer kendi oynatmasını kaydedebilir.

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 kullanamayacağınızı unutmayın birlikte. İkisinden birini seçmeniz gerekir. Benzer şekilde, addMatchingUid() ve excludeUid() öğelerini kullanamazsınız ile aynı anda oynatabilirsiniz.

Diğer uygulamalar tarafından yakalama işlemi kısıtlanıyor

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 şartları karşılaması halinde 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, Bu, diğer uygulamaların oynatmayı yakalamasına olanak tanır. 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 satıcıları ve destek özellikleri tarafından özelleştirilmiştir erişilebilirlik ve altyazı gibi. Bu nedenle, uygulamaların oynatma işlemini sistemin yakalamasına izin vermesi önerilir. Nadiren de olsa uygulamanın oynatma kaydını yakalamasını istiyorsanız yakalama politikasını ALLOW_CAPTURE_BY_NONE.

Çalışma zamanında politika ayarlama

Yakalamayı değiştirmek için AudioManager.setAllowedCapturePolicy() komutunu çağırabilirsiniz politikası var. Yöntemi çağırdığınız sırada bir MediaPlayer veya AudioTrack çalmaktaysa ses etkilenmez. Kapatıp yeniden açmanız gerekiyor geçerli olması için oynatıcıya veya parçaya geri ödeme yapar.

Politika = manifest + AudioManager + AudioAttributes

Yakalama politikası çeşitli yerlerde belirtilebilir. Bu nedenle, etkili politikanın nasıl belirlendiğini anlamaktır. En kısıtlayıcı yakalama politikası her zaman uygulanır. Örneğin, manifesto şunları içerir: setAllowedCapturePolicy="false" sistem dışı reklamlara hiçbir zaman izin vermez AudioManager#setAllowedCapturePolicy ayarlanmış olsa bile sesini yakalayacak uygulamalar alıcı: ALLOW_CAPTURE_BY_ALL. 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 TÜMÜNE_İZİN_VEREN_YAZI 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