Aplikasi dapat merekam video atau audio yang sedang diputar dari aplikasi lain. Seperti
aplikasi harus menangani
Token MediaProjection
dengan benar. Halaman ini akan menjelaskan caranya. Video ini juga menunjukkan cara admin perangkat dapat menonaktifkan
kemampuan untuk merekam cuplikan layar apa pun, dan bagaimana aplikasi audio dapat mencegah
aplikasi lain dari merekam
konten yang diputar.
Cara menangani token MediaProjection
MediaProjection
API
memungkinkan aplikasi memperoleh token MediaProjection
yang memberinya akses satu kali
untuk merekam konten layar atau audio. Android OS meminta izin kepada pengguna
sebelum memberikan token tersebut ke aplikasi Anda.
OS menampilkan token MediaProjection
yang aktif di UI Setelan Cepat dan
memungkinkan pengguna untuk menarik
akses ke token kapan saja. Ketika ini terjadi,
tampilan virtual atau streaming audio yang terkait dengan penghentian penerimaan sesi
streaming media. Aplikasi Anda harus merespons dengan tepat, jika tidak, aplikasi akan melanjutkan
untuk merekam keheningan audio atau streaming video hitam.
Untuk menangani hilangnya token, daftarkan callback pada MediaProjection
menggunakan
registerCallback
, dan berhenti merekam ketika
onStop
dipanggil.
Untuk informasi selengkapnya, lihat Proyeksi media.
Rekam video
Lihat Aplikasi contoh Screenshot mempelajari cara menggunakan Media Projection API untuk merekam aktivitas secara real time dan menampilkannya di SurfaceView.
Anda dapat menggunakan DevicePolicyManager
untuk mencegah perekaman layar. Untuk akun perusahaan (Android for Work),
administrator dapat menonaktifkan pengumpulan data asisten untuk profil kerja
menggunakan
setScreenCaptureDisabled
.
Codelab Mengelola Perangkat Android Tanpa Aplikasi menunjukkan cara melarang screenshot.
Merekam pemutaran audio
AudioPlaybackCapture API diperkenalkan di Android 10. API ini memberi aplikasi kemampuan untuk menyalin audio yang sedang diputar oleh aplikasi lain. Ini adalah analog dari tangkapan layar, tetapi untuk audio. Kasus penggunaan utamanya adalah untuk aplikasi streaming yang ingin merekam audio yang sedang diputar oleh game.
Perhatikan bahwa AudioPlaybackCapture API tidak memengaruhi latensi aplikasi yang audionya ditangkap.
Membangun aplikasi perekaman
Untuk keamanan dan privasi, perekaman pemutaran memaksakan beberapa batasan. Untuk dapat merekam audio, aplikasi harus memenuhi persyaratan ini:
- Aplikasi harus memiliki
RECORD_AUDIO
izin akses. - Aplikasi harus memunculkan perintah yang ditampilkan oleh
MediaProjectionManager.createScreenCaptureIntent()
, dan pengguna harus menyetujuinya. - Aplikasi yang merekam dan memutar aplikasi harus dalam profil pengguna yang sama.
Untuk merekam audio dari aplikasi lain, aplikasi Anda harus membangun
Objek AudioRecord
dan tambahkan
AudioPlaybackCaptureConfiguration
IP eksternal mana pun yang
ditetapkan pada instance tersebut. Ikuti langkah berikut:
- Panggil
AudioPlaybackCaptureConfiguration.Builder.build()
untuk membangunAudioPlaybackCaptureConfiguration
- Teruskan konfigurasi ke
AudioRecord
dengan memanggilsetAudioPlaybackCaptureConfig
.
Mengontrol rekaman audio
Aplikasi Anda dapat mengontrol jenis konten yang dapat direkam, dan hal lainnya jenis aplikasi tertentu dapat merekam pemutarannya sendiri.
Membatasi perekaman dengan konten audio
Aplikasi dapat membatasi audio mana yang dapat direkam menggunakan metode:
- Teruskan
AUDIO_USAGE
ke AudioPlaybackCaptureConfiguration.addMatchingUsage() untuk memungkinkan perekaman penggunaan tertentu. Panggil metode ini beberapa kali untuk menentukan lebih dari satu penggunaan. - Teruskan
AUDIO_USAGE
ke AudioPlaybackCaptureConfiguration.excludeUsage() untuk melarang merekam penggunaan itu. Panggil metode ini beberapa kali untuk menentukan lebih dari satu penggunaan. - Meneruskan UID ke AudioPlaybackCaptureConfiguration.addMatchingUid() untuk hanya mengambil aplikasi dengan UID tertentu. Panggil metode ini beberapa kali untuk menentukan lebih dari satu UID.
- Teruskan UID ke AudioPlaybackCaptureConfiguration.excludeUid() untuk melarang perekaman UID tersebut. Panggil metode ini beberapa kali untuk menentukan lebih dari satu UID.
Perlu diperhatikan bahwa Anda tidak dapat menggunakan metode addMatchingUsage()
dan excludeUsage()
secara
bersamaan. Anda harus memilih satu atau yang lain. Demikian juga, Anda tidak dapat menggunakan addMatchingUid()
dan excludeUid()
secara bersamaan.
Membatasi perekaman oleh aplikasi lain
Anda dapat mengonfigurasi aplikasi untuk mencegah aplikasi lain merekam audionya. Audio yang berasal dari aplikasi hanya dapat direkam jika aplikasi memenuhi persyaratan berikut:
Penggunaan
Pemutar yang menghasilkan audio harus menyetel penggunaannya
kepada USAGE_MEDIA
,
USAGE_GAME
, atau
USAGE_UNKNOWN
.
Kebijakan perekaman
Kebijakan penangkapan pemain harus
AudioAttributes.ALLOW_CAPTURE_BY_ALL
,
yang memungkinkan aplikasi lain
menangkap pemutaran. Ini dapat dilakukan dengan beberapa cara:
- Untuk mengaktifkan perekaman pada semua pemutar, sertakan
android:allowAudioPlaybackCapture="true"
di aplikasi Filemanifest.xml
. - Anda juga dapat mengaktifkan perekaman pada semua pemutar dengan memanggil
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
- Anda dapat menyetel kebijakan pada
setiap pemutar jika Anda membuatnya menggunakan
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
(Jika Anda menggunakan panggilanAAudio
AAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
.)
Jika prasyarat tersebut terpenuhi, audio apa pun yang diproduksi oleh pemutar dapat direkam.
Menonaktifkan perekaman sistem
Perlindungan yang memungkinkan perekaman yang dijelaskan di atas hanya berlaku untuk aplikasi. Android
komponen sistem dapat merekam
pemutaran secara default.
Banyak dari komponen ini disesuaikan oleh vendor Android dan fitur dukungannya
seperti aksesibilitas dan pemberian teks. Oleh karena itu, sebaiknya aplikasi
memungkinkan sistem merekam
pemutaran mereka. Dalam kasus yang jarang terjadi, ketika Anda tidak
ingin sistem merekam pemutaran aplikasi Anda, setel kebijakan perekaman ke
ALLOW_CAPTURE_BY_NONE
Menetapkan kebijakan saat runtime
Anda bisa panggil AudioManager.setAllowedCapturePolicy()
untuk mengubah rekaman
kebijakan saat aplikasi berjalan. Jika MediaPlayer atau AudioTrack sedang diputar
saat Anda memanggil metode tersebut, audio tidak akan terpengaruh. Anda harus menutup dan membuka kembali
pemutar atau melacak agar
perubahan kebijakan diberlakukan.
Kebijakan = manifes + AudioManager + AudioAttributes
Karena kebijakan perekaman dapat
ditentukan di beberapa tempat, penting
untuk memahami bagaimana
kebijakan yang efektif ditentukan.
Kebijakan perekaman yang paling ketat selalu diterapkan. Misalnya, aplikasi yang
manifes mencakup setAllowedCapturePolicy="false"
tidak akan pernah mengizinkan non-sistem
aplikasi untuk merekam audionya, meskipun AudioManager#setAllowedCapturePolicy
disetel
ke ALLOW_CAPTURE_BY_ALL
. Demikian pula, jika
AudioManager#setAllowedCapturePolicy
disetel ke ALLOW_CAPTURE_BY_ALL
dan
manifes menyetel setAllowedCapturePolicy="true"
, tetapi
AudioAttributes
dibuat dengan
AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
, lalu
pemutar media ini tidak dapat direkam oleh aplikasi non-sistem.
Tabel di bawah meringkas efek dari atribut manifes dan kebijakan yang berlaku:
allowAudioPlaybackCapture | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
true | aplikasi mana pun | hanya sistem | tidak ada perekaman |
false | hanya sistem | hanya sistem | tidak ada perekaman |