Video ve ses oynatmayı yakalama

Bir uygulama, başka bir uygulamadan oynatılan videoyu veya sesi kaydedebilir. Böyle 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 uygulamaların, kullanıcılara tek seferlik erişim sağlayan bir MediaProjection jetonu almasına izin verir veya sesini yakalamanızı sağlar. Android OS, kullanıcıdan izninizin olması gerekir.

İşletim sistemi, Hızlı Ayarlar kullanıcı arayüzünde etkin MediaProjection jetonlarını gösterir ve Kullanıcıların jetona erişimi istedikleri zaman geri çekmelerine olanak tanır. Böyle bir durumda oturumla ilişkili sanal ekranlar veya ses akışlarının almayı durdurma medya akışı gerçekleştirebilirsiniz. Uygulamanız düzgün bir şekilde yanıt vermelidir, aksi takdirde devam eder kullanarak ses kapatma veya siyah video akışı kaydedebilirsiniz.

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

Bkz. ScreenCapture örnek uygulaması Media Projection API'yi kullanarak cihazın ekran görüntüsünü almayı görüntüleyin ve bir SurfaceView'da görüntüleyin.

Şunu kullanabilirsiniz: DevicePolicyManager engelleyebilirsiniz. Kurumsal hesaplarda (Android for Work), yönetici, iş profili için asistan verilerinin toplanmasını devre dışı bırakabilir öğesini kullanarak setScreenCaptureDisabled yöntemidir.

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

Ses çalma

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 özellik, ekran görüntüsüne benzer, ancak işitseldir. Birincil kullanım alanı 'i kullanın.

AudioPlaybackCapture API, sesi kapalı olan uygulamanın gecikmesini bu şekildedir.

Yakalama uygulaması oluşturma

Oynatma yakalama, güvenlik ve gizlilik açısından bazı sınırlamalar uygular. Uygulamaların ses kaydedebilmesi için aşağıdaki gereksinimleri 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.Builder.build() numaralı telefonu arayın mevcut bir AudioPlaybackCaptureConfiguration.
  2. Şu numarayı çağırarak yapılandırmayı AudioRecord cihazına aktarın: setAudioPlaybackCaptureConfig

Ses yakalamayı kontrol etme

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

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

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

addMatchingUsage() ve excludeUsage() yöntemlerini kullanamayacağınızı unutmayın birlikte. İkisinden birini seçmeniz gerekir. Benzer şekilde, addMatchingUid() ve excludeUid() kullanılamaz ile aynı anda oynatabilirsiniz.

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

Bir uygulamayı, diğer uygulamaların o uygulamanın sesini yakalamasını önleyecek şekilde yapılandırabilirsiniz. Bir uygulamadan gelen ses, yalnızca uygulamanın aşağıdaki şartları karşılaması durumunda yakalanabilir:

Kullanım

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

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ç ş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, uygulamanızın sisteme, oynatılan içeriği kaydetmesine izin verir. 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() öğesini çağırabilirsiniz politikası var. Bir MediaPlayer veya AudioTrack çalıyorsa yöntemi çağırdığınızda 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. Her zaman en kısıtlayıcı yakalama politikası uygulanır. Örneğin, manifesto şunları içerir: setAllowedCapturePolicy="false" hiçbir zaman sistem dışı reklamlara izin vermez AudioManager#setAllowedCapturePolicy ayarlanmış olsa bile sesini yakalayacak uygulamalar alıcı: ALLOW_CAPTURE_BY_ALL. Benzer bir şekilde, AudioManager#setAllowedCapturePolicy, ALLOW_CAPTURE_BY_ALL olarak ayarlandı ve manifesto setAllowedCapturePolicy="true" değerini ayarlar, ancak medya oynatıcının AudioAttributes şununla oluşturulmuştur: AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), ardından bu medya oynatıcı, sistem dışı uygulamalar tarafından görüntülenemez.

Aşağıdaki tabloda, manifest özelliğinin ve geçerli politika:

allowSesÇalmaYatırma TÜMÜNE_İZİN_VEREN_YAZI SİSTEMİN_YAZISI_İZİN_VEREN_YAPILACAKLAR YOK_ALTYAZI_YAZI
doğru herhangi bir uygulama yalnızca sistem yakalama yok
yanlış yalnızca sistem yalnızca sistem yakalama yok