Memutar media di latar belakang

Artikel ini menunjukkan cara mengonfigurasi aplikasi sehingga media terus diputar saat aplikasi berpindah dari latar depan ke latar belakang. Ini berarti bahwa bahkan setelah pengguna meminimalkan aplikasi Anda, kembali ke layar beranda, atau telah bernavigasi jauh dari aplikasi Anda dengan cara lain, aplikasi Anda dapat terus memutar audio.

Skenario untuk pemutaran audio latar belakang meliputi:

  • Daftar putar yang berjalan lama: Pengguna secara singkat memunculkan aplikasi latar depan untuk memilih dan memulai daftar putar, setelah itu pengguna mengharapkan daftar putar untuk terus bermain di latar belakang.

  • Menggunakan pengalih tugas: Pengguna secara singkat memunculkan aplikasi latar depan untuk mulai memutar audio, lalu beralih ke aplikasi terbuka lain menggunakan pengalih tugas. Pengguna mengharapkan audio terus diputar di latar belakang.

Implementasi audio latar belakang yang dijelaskan dalam artikel ini akan memungkinkan aplikasi Anda berjalan secara universal di semua perangkat Windows termasuk Seluler, Desktop, dan Xbox.

Catatan

Kode dalam artikel ini diadaptasi dari sampel Audio Latar Belakang UWP.

Penjelasan tentang model satu proses

Dengan Windows 10, versi 1607, model proses tunggal baru telah diperkenalkan yang sangat menyederhanakan proses mengaktifkan audio latar belakang. Sebelumnya, aplikasi Anda diharuskan untuk mengelola proses latar belakang selain aplikasi latar depan Anda dan kemudian mengkomunikasikan perubahan status secara manual antara kedua proses. Di bawah model baru, Anda cukup menambahkan kemampuan audio latar belakang ke manifes aplikasi Anda, dan aplikasi Anda akan terus memutar audio secara otomatis saat berpindah ke latar belakang. Dua peristiwa siklus hidup aplikasi baru, EnteredBackground dan LeavingBackground memberi tahu aplikasi Anda saat memasuki dan meninggalkan latar belakang. Saat aplikasi Anda berpindah ke transisi ke atau dari latar belakang, batasan memori yang diberlakukan oleh sistem dapat berubah, sehingga Anda dapat menggunakan peristiwa ini untuk memeriksa konsumsi memori Anda saat ini dan membebaskan sumber daya agar tetap di bawah batas.

Dengan menghilangkan komunikasi lintas proses yang kompleks dan manajemen status, model baru memungkinkan Anda untuk mengimplementasikan audio latar belakang jauh lebih cepat dengan pengurangan kode yang signifikan. Namun, model dua proses masih didukung dalam rilis saat ini untuk kompatibilitas mundur. Untuk informasi selengkapnya, lihat Model audio latar belakang warisan.

Persyaratan untuk audio latar belakang

Aplikasi Anda harus memenuhi persyaratan berikut untuk pemutaran audio saat aplikasi Anda berada di latar belakang.

  • Tambahkan kemampuan Pemutaran Media Latar Belakang ke manifes aplikasi Anda, seperti yang dijelaskan nanti di artikel ini.
  • Jika aplikasi Anda menonaktifkan integrasi otomatis MediaPlayer dengan System Media Transport Controls (SMTC), seperti dengan mengatur properti CommandManager.IsEnabled ke false, maka Anda harus menerapkan integrasi manual dengan SMTC untuk mengaktifkan pemutaran media latar belakang. Anda juga harus berintegrasi secara manual dengan SMTC jika Anda menggunakan API selain MediaPlayer, seperti AudioGraph, untuk memutar audio jika Anda ingin audio terus diputar saat aplikasi Anda berpindah ke latar belakang. Persyaratan integrasi SMTC minimum dijelaskan di bagian "Gunakan kontrol transportasi media sistem untuk audio latar belakang" dari Kontrol Transportasi Media Sistem secara manual.
  • Saat aplikasi Anda berada di latar belakang, Anda harus tetap berada di bawah batas penggunaan memori yang ditetapkan oleh sistem untuk aplikasi latar belakang. Panduan untuk mengelola memori saat berada di latar belakang disediakan nanti di artikel ini.

Kemampuan manifes pemutaran media latar belakang

Untuk mengaktifkan audio latar belakang, Anda harus menambahkan kemampuan pemutaran media latar belakang ke file manifes aplikasi, Package.appxmanifest.

Untuk menambahkan kemampuan ke manifes aplikasi menggunakan perancang manifes

  1. Di Microsoft Visual Studio, di Penjelajah Solusi, buka perancang untuk manifes aplikasi dengan mengklik dua kali item package.appxmanifest .
  2. Pilih tab Kemampuan.
  3. Pilih kotak centang Pemutaran Media Latar Belakang .

Untuk mengatur kemampuan dengan mengedit xml manifes aplikasi secara manual, pertama-tama pastikan bahwa awalan namespace uap3 ditentukan dalam elemen Paket . Jika tidak, tambahkan seperti yang ditunjukkan di bawah ini.

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
  IgnorableNamespaces="uap uap3 mp">

Selanjutnya, tambahkan kemampuan backgroundMediaPlayback ke elemen Capabilities :

<Capabilities>
    <uap3:Capability Name="backgroundMediaPlayback"/>
</Capabilities>

Menangani transisi antara latar depan dan latar belakang

Saat aplikasi Anda berpindah dari latar depan ke latar belakang, peristiwa EnteredBackground akan dinaikkan. Dan saat aplikasi Anda kembali ke latar depan, peristiwa LeavingBackground dinaikkan. Karena ini adalah peristiwa siklus hidup aplikasi, Anda harus mendaftarkan handler untuk peristiwa ini saat aplikasi Anda dibuat. Dalam templat proyek default, ini berarti menambahkannya ke konstruktor kelas Aplikasi di App.xaml.cs.

public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;

    this.EnteredBackground += App_EnteredBackground;
    this.LeavingBackground += App_LeavingBackground;
}

Buat variabel untuk melacak apakah Anda saat ini berjalan di latar belakang.

bool _isInBackgroundMode = false;

Saat peristiwa EnteredBackground dinaikkan, atur variabel pelacakan untuk menunjukkan bahwa Anda saat ini berjalan di latar belakang. Anda tidak boleh melakukan tugas jangka panjang dalam peristiwa EnteredBackground karena ini dapat menyebabkan transisi ke latar belakang tampak lambat bagi pengguna.

private void App_EnteredBackground(object sender, EnteredBackgroundEventArgs e)
{
    _isInBackgroundMode = true;
}

Di penanganan aktivitas LeavingBackground , Anda harus mengatur variabel pelacakan untuk menunjukkan bahwa aplikasi Anda tidak lagi berjalan di latar belakang.

private void App_LeavingBackground(object sender, LeavingBackgroundEventArgs e)
{
    _isInBackgroundMode = false;
}

Persyaratan manajemen memori

Bagian terpenting dalam menangani transisi antara latar depan dan latar belakang adalah mengelola memori yang digunakan aplikasi Anda. Karena berjalan di latar belakang akan mengurangi sumber daya memori yang diizinkan untuk dipertahankan oleh sistem, Anda juga harus mendaftar untuk peristiwa AppMemoryUsageIncreased dan AppMemoryUsageLimitChanging . Ketika peristiwa ini dinaikkan, Anda harus memeriksa penggunaan memori aplikasi Anda saat ini dan batas saat ini, lalu mengurangi penggunaan memori Anda jika diperlukan. Untuk informasi tentang mengurangi penggunaan memori saat berjalan di latar belakang, lihat Memori kosong saat aplikasi Anda berpindah ke latar belakang.

Ketersediaan jaringan untuk aplikasi media latar belakang

Semua sumber media yang sadar jaringan, sumber yang tidak dibuat dari aliran atau file, akan menjaga koneksi jaringan tetap aktif saat mengambil konten jarak jauh, dan mereka merilisnya saat tidak. MediaStreamSource, khususnya, mengandalkan aplikasi untuk melaporkan rentang buffer yang benar ke platform menggunakan SetBufferedRange dengan benar. Setelah seluruh konten di-buffer sepenuhnya, jaringan tidak akan lagi dicadangkan atas nama aplikasi.

Jika Anda perlu melakukan panggilan jaringan yang terjadi di latar belakang ketika media tidak mengunduh, ini harus dibungkus dalam tugas yang sesuai seperti MaintenanceTrigger atau TimeTrigger. Untuk informasi selengkapnya, lihat Mendukung aplikasi Anda dengan tugas latar belakang.