Pengambilan pemutaran

AudioPlaybackCapture API diperkenalkan pada Android 10. API ini memberi aplikasi kemampuan untuk menyalin audio yang sedang diputar oleh aplikasi lain. Fitur ini adalah analog dari tangkapan layar, tetapi untuk audio. Kasus penggunaan utama adalah untuk streaming aplikasi yang ingin merekam audio yang sedang diputar oleh game.

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

Membangun aplikasi perekaman

Prasyarat

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

Merekam audio

Untuk merekam audio dari aplikasi lain, aplikasi Anda harus membuat objek AudioRecord dan menambahkan AudioPlaybackCaptureConfiguration ke dalamnya. Ikuti langkah ini:

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

Membatasi perekaman dengan konten audio

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

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() secara bersamaan.

Mengizinkan perekaman pemutaran

Anda dapat mengonfigurasi aplikasi untuk mencegah aplikasi lain merekam audionya. Audio yang berasal dari aplikasi hanya dapat direkam jika aplikasi memenuhi persyaratan ini:

Pemakaian

Pemutar yang menghasilkan audio tersebut harus menyetel penggunaannya ke USAGE_MEDIA, USAGE_GAME, atau USAGE_UNKNOWN.

Kebijakan perekaman

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

Jika prasyarat ini dipenuhi, 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 dari komponen ini dikustomisasi 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, ketika Anda tidak ingin sistem merekam pemutaran aplikasi Anda, setel kebijakan perekaman ke ALLOW_CAPTURE_BY_NONE.

Menetapkan kebijakan saat runtime

Anda bisa memanggil AudioManager.setAllowedCapturePolicy() untuk mengubah kebijakan perekaman saat aplikasi sedang berjalan. Jika MediaPlayer atau AudioTrack diputar saat Anda memanggil metode, audionya tidak 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 bagaimana kebijakan yang efektif ditentukan. Kebijakan perekaman yang paling ketat selalu diterapkan. Misalnya, aplikasi yang manifesnya mencakup setAllowedCapturePolicy="false" tidak akan pernah mengizinkan aplikasi non-sistem untuk menangkap audionya, meskipun AudioManager#setAllowedCapturePolicy disetel ke ALLOW_CAPTURE_BY_ALL. Demikian pula, jika AudioManager#setAllowedCapturePolicy disetel ke ALLOW_CAPTURE_BY_ALL dan manifes disetel ke setAllowedCapturePolicy="true", tetapi AudioAttributes pemutar media dibangun dengan AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), maka pemutar media ini tidak akan dapat direkam oleh aplikasi non-sistem.

Tabel di bawah ini merangkum efek dari atribut manifes dan kebijakan efektif:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true aplikasi apa pun hanya sistem tidak ada perekaman
false hanya sistem hanya sistem tidak ada perekaman