Aplikasi dapat merekam video atau audio yang sedang diputar dari aplikasi lain. Aplikasi semacam itu harus menangani token MediaProjection dengan benar. Halaman ini menjelaskan caranya. Dokumen ini juga menunjukkan cara admin perangkat dapat menonaktifkan
kemampuan untuk merekam screenshot apa pun, dan cara aplikasi audio dapat mencegah
aplikasi lain merekam konten yang diputar.
Cara menangani token MediaProjection
API MediaProjection
memungkinkan aplikasi mendapatkan token MediaProjection yang memberi mereka akses satu kali
untuk merekam konten layar atau audio. Android OS meminta izin pengguna sebelum memberikan token ke aplikasi Anda.
OS menampilkan token MediaProjection aktif di UI Setelan Cepat dan
memungkinkan pengguna mencabut akses ke token kapan saja. Jika hal ini terjadi, tampilan virtual atau aliran audio yang terkait dengan sesi akan berhenti menerima aliran media. Aplikasi Anda harus merespons dengan tepat, jika tidak, aplikasi akan terus merekam keheningan audio atau streaming video hitam.
Untuk menangani hilangnya token, daftarkan callback pada instance MediaProjection
menggunakan metode
registerCallback, dan hentikan perekaman saat metode
onStop
dipanggil.
Untuk mengetahui informasi selengkapnya, lihat Proyeksi media.
Rekam video
Anda dapat menggunakan DevicePolicyManager
untuk mencegah perekaman layar. Untuk akun perusahaan (Android untuk Kerja), administrator dapat menonaktifkan pengumpulan data asisten untuk profil kerja menggunakan metode 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 diputar oleh aplikasi lain. Fitur ini adalah analog dari pengambilan screenshot, tetapi untuk audio. Kasus penggunaan utamanya adalah untuk aplikasi streaming yang ingin merekam audio yang diputar oleh game.
Perhatikan bahwa AudioPlaybackCapture API tidak memengaruhi latensi aplikasi yang audionya sedang direkam.
Membuat aplikasi perekaman
Untuk keamanan dan privasi, perekaman pemutaran menerapkan beberapa batasan. Untuk dapat merekam audio, aplikasi harus memenuhi persyaratan berikut:
- Aplikasi harus memiliki
izin
RECORD_AUDIO. - Aplikasi harus memunculkan dialog yang ditampilkan oleh
MediaProjectionManager.createScreenCaptureIntent(), dan pengguna harus menyetujuinya. - Aplikasi yang merekam dan memutar harus ada dalam profil pengguna yang sama.
Untuk merekam audio dari aplikasi lain, aplikasi Anda harus membuat objek
AudioRecord
dan menambahkan
AudioPlaybackCaptureConfiguration
ke objek tersebut. Ikuti langkah berikut:
- Panggil
AudioPlaybackCaptureConfiguration.Builder.build()untuk membuatAudioPlaybackCaptureConfiguration. - Teruskan konfigurasi ke
AudioRecorddengan memanggilsetAudioPlaybackCaptureConfig.
Mengontrol perekaman audio
Aplikasi Anda dapat mengontrol jenis konten yang dapat direkam, dan jenis aplikasi lain yang dapat merekam pemutarannya sendiri.
Membatasi perekaman dengan konten audio
Aplikasi dapat membatasi audio yang dapat direkamnya dengan menggunakan metode berikut:
- Teruskan
AUDIO_USAGEke AudioPlaybackCaptureConfiguration.Builder.addMatchingUsage() untuk mengizinkan pengambilan penggunaan tertentu. Panggil metode ini beberapa kali untuk menentukan lebih dari satu penggunaan. - Teruskan
AUDIO_USAGEke AudioPlaybackCaptureConfiguration.excludeUsage() untuk melarang pengambilan penggunaan tersebut. Panggil metode ini beberapa kali untuk menentukan lebih dari satu penggunaan. - Teruskan UID ke AudioPlaybackCaptureConfiguration.addMatchingUid() untuk merekam hanya aplikasi dengan UID tertentu. Panggil metode beberapa kali untuk menentukan lebih dari satu UID.
- Teruskan UID ke AudioPlaybackCaptureConfiguration.excludeUid() untuk melarang pengambilan UID tersebut. Panggil metode beberapa kali untuk menentukan lebih dari satu UID.
Perhatikan bahwa Anda tidak dapat menggunakan metode addMatchingUsage() dan excludeUsage()
secara bersamaan. Anda harus memilih satu atau yang lain. Demikian pula, Anda tidak dapat menggunakan addMatchingUid() dan excludeUid()
secara bersamaan.
Membatasi pengambilan gambar oleh aplikasi lain
Anda dapat mengonfigurasi aplikasi untuk mencegah aplikasi lain merekam audio-nya. Audio yang berasal dari aplikasi hanya dapat direkam jika aplikasi memenuhi persyaratan berikut:
Penggunaan
Pemutar yang menghasilkan audio harus menetapkan penggunaannya
ke USAGE_MEDIA,
USAGE_GAME, atau
USAGE_UNKNOWN.
Kebijakan perekaman
Kebijakan perekaman pemutar harus
AudioAttributes.ALLOW_CAPTURE_BY_ALL,
yang memungkinkan aplikasi lain merekam pemutaran. Ini dapat dilakukan dengan beberapa cara:
- Untuk mengaktifkan perekaman pada semua pemain, sertakan
android:allowAudioPlaybackCapture="true"dalam filemanifest.xmlaplikasi. - Anda juga dapat mengaktifkan pengambilan di semua pemutar dengan memanggil
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL). - Anda dapat menetapkan kebijakan pada setiap pemain saat Anda membangunnya menggunakan
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL). (Jika Anda menggunakan panggilanAAudioAAudioStreamBuilder_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. Komponen sistem Android dapat merekam pemutaran secara default.
Banyak komponen ini disesuaikan oleh vendor Android dan mendukung fitur seperti aksesibilitas dan teks. Oleh karena itu, sebaiknya aplikasi mengizinkan sistem merekam pemutarannya. Jika Anda tidak ingin sistem merekam pemutaran aplikasi Anda, tetapkan kebijakan perekaman ke ALLOW_CAPTURE_BY_NONE.
Menetapkan kebijakan saat waktu proses
Anda dapat memanggil AudioManager.setAllowedCapturePolicy() untuk mengubah kebijakan pengambilan saat aplikasi sedang berjalan. Jika MediaPlayer atau AudioTrack sedang diputar
saat Anda memanggil metode, audio tidak akan terpengaruh. Anda harus menutup dan membuka kembali
pemutar atau jalur untuk menerapkan perubahan kebijakan.
Kebijakan = manifes + AudioManager + AudioAttributes
Karena kebijakan pengambilan dapat ditentukan di beberapa tempat, penting untuk memahami cara kebijakan yang efektif ditentukan.
Kebijakan perekaman yang paling ketat selalu diterapkan. Misalnya, aplikasi yang
manifesnya menyertakan setAllowedCapturePolicy="false" tidak akan pernah mengizinkan aplikasi
non-sistem 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 pemutar media dibuat dengan
AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), maka
pemutar media ini tidak akan dapat direkam oleh aplikasi non-sistem.
Tabel di bawah merangkum efek atribut manifes dan kebijakan efektif:
| 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 |