Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Perekaman pemutaran

Android Q berisi AudioPlaybackCapture API baru. API ini memberi aplikasi kemampuan untuk menyalin audio yang sedang diputar oleh aplikasi lain. Fitur ini adalah analog tangkapan layar, tetapi untuk audio. Kasus penggunaan utamanya adalah untuk streaming aplikasi yang ingin merekam audio yang sedang diputar oleh game.

Perhatikan bahwa API perekaman tidak memengaruhi latensi aplikasi yang audionya sedang direkam.

Membuat aplikasi perekaman

Prasyarat

Untuk keamanan dan privasi, perekaman pemutaran menerapkan beberapa batasan. Untuk dapat merekam audio, aplikasi harus memenuhi persyaratan berikut:

Merekam audio

Untuk merekam audio dari aplikasi lain, aplikasi Anda harus membuat objek AudioRecord dan menambahkan AudioPlaybackCaptureConfiguration pada aplikasi tersebut. Ikuti langkah berikut:

  1. Panggil AudioPlaybackCaptureConfiguration.Builder.build() untuk membuat AudioPlaybackCaptureConfiguration.
  2. Teruskan konfigurasi ke AudioRecord dengan memanggil setAudioPlaybackCaptureConfig.

Membatasi perekaman dengan konten audio

Aplikasi dapat membatasi audio mana yang dapat direkam dengan menggunakan metode berikut:

Perhatikan bahwa Anda tidak dapat menggunakan metode addMatchingUsage() dan excludeUsage() bersamaan. Anda harus memilih satu atau yang lain. Demikian juga, Anda tidak dapat menggunakan addMatchingUid() dan excludeUid() bersamaan.

Mengizinkan perekaman pemutaran

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 memproduksi audio harus menyetel penggunaannya ke USAGE_MEDIA , USAGE_GAME, atau USAGE_UNKNOWN.

Kebijakan perekaman

Kebijakan perekaman pemutar harus berupa AudioAttributes.ALLOW_CAPTURE_BY_ALL, yang memungkinkan aplikasi lain merekam pemutaran. Ini dapat dilakukan dengan beberapa cara:

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 mengabaikan batasan ini dan dapat merekam pemutaran secara default. Banyak dari komponen tersebut disesuaikan oleh vendor Android dan mendukung fitur seperti aksesibilitas dan penulisan teks. Untuk alasan ini, disarankan agar aplikasi memungkinkan sistem merekam pemutarannya. Dalam kasus yang jarang terjadi, jika Anda tidak ingin sistem merekam pemutaran aplikasi, tetapkan kebijakan perekaman ke ALLOW_CAPTURE_BY_NONE.

Menetapkan kebijakan saat waktu proses

Anda dapat memanggil AudioManager.setAllowedCapturePolicy() untuk mengubah kebijakan perekaman saat aplikasi sedang berjalan. Jika MediaPlayer atau AudioTrack diputar saat Anda memanggil metode, audionya tidak akan terpengaruh. Anda harus menutup dan membuka kembali pemutar atau melacak agar perubahan kebijakan berlaku.

Kebijakan = manifes + AudioManager + AudioAttributes

Karena kebijakan perekaman dapat ditentukan di beberapa tempat, penting untuk memahami cara menentukan kebijakan yang efektif. Kebijakan perekaman yang paling ketat selalu diterapkan. Misalnya, aplikasi yang manifesnya mencakup setAllowedCapturePolicy="false" tidak akan pernah mengizinkan aplikasi non-sistem 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 pemutar media AudioAttributes dibuat dengan AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), pemutar media ini tidak dapat direkam oleh aplikasi non-sistem.

Tabel di bawah ini merangkum 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