Bir uygulama, başka bir uygulamadan oynatılan videoyu 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üsü kaydetme özelliğini nasıl devre dışı bırakabileceğini ve bir ses uygulamasının diğer uygulamaların çaldığı içeriği kaydetmesini nasıl engelleyebileceğini gösterir.
MediaProjection
jetonu nasıl kullanılır?
MediaProjection
API, uygulamaların bir MediaProjection
jetonu almasına izin verir. Bu jeton, ekran içeriklerini veya sesleri yakalamak için tek seferlik erişim izni verir. Android OS, jetonu uygulamanıza vermeden önce kullanıcıdan izin ister.
OS, 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 etmelerine 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ı işlemek için registerCallback
yöntemini kullanarak MediaProjection
örneğine geri çağırma işlevi kaydedin ve onStop
yöntemi çağrıldığında kaydı durdurun.
Daha fazla bilgi için Medya projeksiyonu başlıklı makaleyi inceleyin.
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.
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.
Uygulamasız Android Cihazları Yönetme codelab'inde, ekran görüntülerinin nasıl yasaklanacağı gösterilmektedir.
Ses oynatmayı yakalama
AudioPlaybackCapture API, Android 10'da kullanıma sunulmuştur. Bu API, uygulamalara diğer uygulamalar tarafından çalınan sesi kopyalama olanağı sunar. Bu özellik, ekran görüntülemenin ses için olan eşdeğeridir. Bu API'nin birincil kullanım alanı, oyunlarda çalınan sesleri yakalamak 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 kaydı bazı sınırlamalara tabidir. Ses kaydı yapabilmek için uygulamaların aşağıdaki koşulları karşılaması gerekir:
- Uygulamanın
RECORD_AUDIO
iznine sahip olması gerekir. - Uygulama,
MediaProjectionManager.createScreenCaptureIntent()
tarafından gösterilen istemi açmalı ve kullanıcı bu isteği onaylamalıdır. - Kayıt ve oynatma uygulamaları aynı kullanıcı profilinde olmalıdır.
Başka bir uygulamadan ses yakalamak için uygulamanızın bir AudioRecord
nesnesi oluşturması ve buna bir AudioPlaybackCaptureConfiguration
eklemesi gerekir. Ş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 kaydını kontrol etme
Uygulamanız, hangi içerik türlerini kaydedebileceğini ve hangi diğer uygulama türlerinin kendi oynatma işlemini kaydedebileceğini kontrol edebilir.
Ses içeriği 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. - Bu kullanımı yakalamayı yasaklamak için AudioPlaybackCaptureConfiguration.excludedUsage() öğesine 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() öğesine bir UID iletin. 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 birlikte kullanamayacağınızı unutmayın. İkisinden birini seçmeniz gerekir. Benzer şekilde, addMatchingUid()
ve excludeUid()
'yi aynı anda kullanamazsınız.
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ı 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ı, diğer uygulamaların oynatmayı yakalamasına izin veren AudioAttributes.ALLOW_CAPTURE_BY_ALL
olmalıdır. Bunu birkaç farklı şekilde yapabilirsiniz:
- Tüm oyuncularda yakalamayı etkinleştirmek için uygulamanın
manifest.xml
dosyasınaandroid:allowAudioPlaybackCapture="true"
ekleyin. - Ayrıca
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
kodunu çağırarak yakalamayı tüm oynatıcılar için etkinleştirebilirsiniz. AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
ile oluşturduğunuz her oynatıcı için politikayı belirleyebilirsiniz. (AAudio
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 çoğu Android tedarikçileri tarafından özelleştirilir ve erişilebilirlik ve altyazı gibi özellikleri destekler. Bu nedenle, uygulamaların oynatma işlemini sistemin yakalamasına izin vermesi önerilir. Sistemin uygulamanızın oynatmasını 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()
işlevini çağırabilirsiniz. Yöntemi çağırdığınız sırada bir MediaPlayer veya AudioTrack çalmaktaysa 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ı çeşitli yerlerde belirtilebildiğinden etkili 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"
içeren bir uygulama, AudioManager#setAllowedCapturePolicy
ALLOW_CAPTURE_BY_ALL
olarak ayarlanmış olsa bile sistem dışı uygulamaların ses kaydını yakalamasına hiçbir zaman izin vermez. Benzer şekilde, AudioManager#setAllowedCapturePolicy
ALLOW_CAPTURE_BY_ALL
olarak ayarlanmışsa ve manifest setAllowedCapturePolicy="true"
değerini ayarlarsa ancak medya oynatıcının AudioAttributes
değeri AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
ile oluşturulduysa 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 | 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 | no capture |