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:
- Uygulama
RECORD_AUDIO
iznine sahip olmalıdır. - Uygulamanın
MediaProjectionManager.createScreenCaptureIntent()
tarafından görüntülenen istemi getirmesi 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 bir AudioRecord
nesnesi derlemesi ve buna bir AudioPlaybackCaptureConfiguration
eklemesi gerekir. Şu adımları uygulayın:
AudioPlaybackCaptureConfiguration
oluşturmak içinAudioPlaybackCaptureConfiguration.Builder.build()
numaralı telefonu arayın.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:
- Belirli bir kullanımın yakalanmasına izin vermek için AudioPlaybackCaptureConfiguration.addMatchingUsage() işlevine bir
AUDIO_USAGE
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 bir
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() öğesine 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. 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:
- Yakalamayı tüm oynatıcılarda etkinleştirmek için uygulamanın
manifest.xml
dosyasınaandroid:allowAudioPlaybackCapture="true"
ekleyin. - İsterseniz
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
yöntemini çağırarak tüm oyuncularda yakalamayı etkinleştirebilirsiniz. - Politikayı
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
kullanarak oluştururken bağımsız bir oynatıcı için ayarlayabilirsiniz. (AAudio
aramasını kullanıyorsanızAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
numaralı telefonu arayın.)
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 |