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:
- Uygulama,
RECORD_AUDIO
izni gerekir. - Uygulama,
MediaProjectionManager.createScreenCaptureIntent()
, ve kullanıcının bunu onaylaması gerekir. - Yakalama ve oynatma uygulamaları aynı kullanıcı profilinde olmalıdır.
Başka bir uygulamadan ses yakalamak için uygulamanızın
AudioRecord
nesne
ve bir
AudioPlaybackCaptureConfiguration
. Şu adımları uygulayın:
AudioPlaybackCaptureConfiguration
oluşturmak içinAudioPlaybackCaptureConfiguration.Builder.build()
numaralı telefonu arayın.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:
- Belirli bir kullanımın yakalanmasına izin vermek için AudioPlaybackCaptureConfiguration.addMatchingUsage() yöntemine bir
AUDIO_USAGE
gönderin. Birden fazla kullanım belirtmek için yöntemi birden çok kez çağırın. - AudioPlaybackCaptureConfiguration.excludedUsage() işlevine bir
AUDIO_USAGE
iletip kullanılmasını yasaklar. Birden fazla kullanım belirtmek için yöntemi birden çok kez çağırın. - Yalnızca belirli bir UID'ye sahip uygulamaları yakalamak için AudioPlaybackCaptureConfiguration.addMatchingUid() işlevine bir UID gönderin. Birden fazla UID belirtmek için yöntemi birden çok kez çağırın.
- AudioPlaybackCaptureConfiguration.excludeUid() işlevine bir UID göndererek bu UID'nin yakalanmasını yasaklayın. Birden fazla UID belirtmek için yöntemi birden çok kez çağırın.
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:
- Tüm oyuncularda yakalamayı etkinleştirmek için uygulamanın
manifest.xml
dosyasınaandroid:allowAudioPlaybackCapture="true"
ekleyin. AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
tuşuna basarak da tüm oyuncularda yakalama özelliğini etkinleştirebilirsiniz.- Tek bir oynatıcıda bu politikayı, oynatıcıyı
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
. (AAudio
çağrısı kullanıyorsanızAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
.)
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 |