Bir uygulama, başka bir uygulamada oynatılan videoyu veya sesi kaydedebilir. Bu tür uygulamalar, MediaProjection
jetonunu doğru şekilde işlemelidir. Bu sayfada 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ği ve bir ses uygulamasının, diğer uygulamaların oynattığı içeriği kaydetmesini nasıl engelleyebileceği de gösterilmektedir.
MediaProjection
jetonunu kullanma
MediaProjection
API, uygulamaların ekran içeriklerini veya sesleri yakalamak için tek seferlik erişim sağlayan bir MediaProjection
jetonu almasına olanak tanır. Android işletim sistemi, 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 jeton erişimini istedikleri zaman iptal etmelerine olanak tanır. Bu durumda, oturumla ilişkili sanal ekranlar veya ses akışları medya akışı almayı durdurur. Uygulamanız uygun şekilde yanıt vermelidir. Aksi takdirde, sessizliği veya siyah bir video akışını kaydetmeye devam eder.
Jeton kaybını işlemek için MediaProjection
örneğinde registerCallback
yöntemini kullanarak geri çağırma kaydı yapın ve onStop
yöntemi çağrıldığında kaydı durdurun.
Daha fazla bilgi için Medya yansıtma başlıklı makaleyi inceleyin.
Video çek
Media Projection API'yi kullanarak bir cihazın ekranını gerçek zamanlı olarak yakalayıp SurfaceView'da göstermeyi öğrenmek için ScreenCapture örnek uygulamasına bakın.
Ekran kaydını önlemek için DevicePolicyManager
simgesini 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 oynatmayı yakalama
AudioPlaybackCapture API, Android 10'da kullanıma sunuldu. Bu API, uygulamalara diğer uygulamalar tarafından oynatılan sesleri kopyalama olanağı tanır. Bu özellik, ekran görüntüsünün ses için olan karşılığıdır. Birincil kullanım alanı, oyunlarda çalınan sesleri kaydetmek 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 yakalama özelliği bazı sınırlamalara tabidir. Bir uygulamanın ses kaydı yapabilmesi için aşağıdaki koşulları karşılaması gerekir:
- Uygulamada
RECORD_AUDIO
izni olmalıdır. - Uygulama,
MediaProjectionManager.createScreenCaptureIntent()
tarafından gösterilen istemi göstermeli ve kullanıcı bu istemi onaylamalıdır. - Kaydetme ve oynatma uygulamaları aynı kullanıcı profilinde olmalıdır.
Başka bir uygulamadan ses yakalamak için uygulamanız bir AudioRecord
nesnesi oluşturmalı ve bu nesneye bir AudioPlaybackCaptureConfiguration
eklemelidir. Şu adımları uygulayın:
AudioPlaybackCaptureConfiguration.Builder.build()
numaralı telefonu arayarakAudioPlaybackCaptureConfiguration
oluşturun.setAudioPlaybackCaptureConfig
işlevini çağırarak yapılandırmayıAudioRecord
'ya iletin.
Ses kaydını kontrol etme
Uygulamanız, hangi içerik türlerini kaydedebileceğini ve hangi tür uygulamaların kendi oynatma işlemlerini 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:
- Belirli bir kullanımın yakalanmasına izin vermek için
AUDIO_USAGE
öğesini AudioPlaybackCaptureConfiguration.addMatchingUsage() öğesine iletin. Birden fazla kullanım belirtmek için yöntemi birden çok kez çağırın. - Bu kullanımın yakalanmasını yasaklamak için AudioPlaybackCaptureConfiguration.excludeUsage() işlevine
AUDIO_USAGE
iletin. 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 iletin. Birden fazla UID belirtmek için yöntemi birden çok kez çağırın.
- Bu UID'nin yakalanmasını yasaklamak için AudioPlaybackCaptureConfiguration.excludeUid() işlevine bir UID iletin. Birden fazla UID belirtmek için yöntemi birden çok kez çağırın.
addMatchingUsage()
ve excludeUsage()
yöntemlerini birlikte kullanamayacağınızı unutmayın. İkisinden birini seçmeniz gerekir. Aynı şekilde, addMatchingUid()
ve excludeUid()
öğelerini aynı anda kullanamazsınız.
Diğer uygulamaların yakalamayı kısıtlaması
Bir uygulamayı, diğer uygulamaların sesini yakalamasını engelleyecek şekilde yapılandırabilirsiniz. Bir uygulamadan gelen sesin kaydedilebilmesi için uygulamanın aşağıdaki koşulları karşılaması gerekir:
Kullanım
Sesi üreten oynatıcı, kullanımını USAGE_MEDIA
, USAGE_GAME
veya USAGE_UNKNOWN
olarak ayarlamalıdır.
Yakalama politikası
Oyuncunun yakalama politikası, diğer uygulamaların oynatmayı yakalamasına izin veren AudioAttributes.ALLOW_CAPTURE_BY_ALL
olmalıdır. Bu işlemi birkaç farklı şekilde yapabilirsiniz:
- Tüm oynatıcılarda yakalamayı etkinleştirmek için uygulamanın
android:allowAudioPlaybackCapture="true"
dosyasınamanifest.xml
ekleyin. AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
işlevini çağırarak tüm oynatıcılarda yakalamayı da etkinleştirebilirsiniz.- Politikayı,
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
kullanarak oluşturduğunuzda tek bir oynatıcıda ayarlayabilirsiniz. (AAudio
görüşme özelliğini kullanıyorsanızAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
.)
Bu ön koşullar karşılandığında, oynatıcı tarafından üretilen tüm sesler kaydedilebilir.
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, oynatmayı varsayılan olarak yakalayabilir.
Bu bileşenlerin çoğu Android satıcıları tarafından özelleştirilir ve erişilebilirlik ile altyazı gibi özellikleri destekler. Bu nedenle, uygulamaların sistemin oynatma işlemlerini yakalamasına izin vermesi önerilir. Sistemin uygulamanızın oynatma işlemlerini 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()
numaralı telefonu arayabilirsiniz. Yöntemi çağırdığınızda bir MediaPlayer veya AudioTrack oynatılıyorsa 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 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ında setAllowedCapturePolicy="false"
bulunan bir uygulama, AudioManager#setAllowedCapturePolicy
değeri ALLOW_CAPTURE_BY_ALL
olarak ayarlanmış olsa bile sistem dışı uygulamaların sesini yakalamasına asla izin vermez. Benzer şekilde, AudioManager#setAllowedCapturePolicy
, ALLOW_CAPTURE_BY_ALL
olarak ayarlanırsa ve manifest setAllowedCapturePolicy="true"
değerini ayarlarsa ancak medya oynatıcının AudioAttributes
değerleri AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
ile oluşturulursa bu medya oynatıcı, sistem dışı uygulamalar tarafından yakalanamaz.
Aşağıdaki tabloda, manifest özelliğinin ve geçerli politikanın etkisi özetlenmektedir:
allowAudioPlaybackCapture | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
doğru | herhangi bir uygulama | yalnızca sistem | yakalama yok |
yanlış | yalnızca sistem | yalnızca sistem | yakalama yok |