Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come configurare l'app in modo che i contenuti multimediali continuino a essere riprodotti mentre l'app passa dal primo piano allo sfondo. Ciò significa che anche dopo che l'utente ha minimizzato l'app, è tornato alla schermata iniziale o si è allontanato dall'app in altro modo, l'app può continuare a riprodurre l'audio.
Gli scenari per la riproduzione audio in background includono:
playlist di lunga durata: L'utente visualizza brevemente un'app in primo piano per selezionare e avviare una playlist, dopo di che si aspetta che la playlist continui a essere riprodotta in background.
Uso del commutatore di attività: L'utente visualizza brevemente un'app in primo piano per avviare la riproduzione dell'audio, quindi passa a un'altra app aperta usando il commutatore di attività. L'utente prevede che l'audio continui a essere riprodotto in background.
L'implementazione dell'audio in background descritta in questo articolo consentirà all'app di essere eseguita universalmente in tutti i dispositivi Windows, tra cui Dispositivi mobili, Desktop e Xbox.
Annotazioni
Il codice in questo articolo è stato adattato dall'esempio UWP Audio in background.
Spiegazione del modello a un processo
Con Windows 10, versione 1607, è stato introdotto un nuovo modello a processo singolo che semplifica notevolmente il processo di abilitazione dell'audio in background. In precedenza, l'app era necessaria per gestire un processo in background oltre all'app in primo piano e quindi comunicare manualmente le modifiche dello stato tra i due processi. Con il nuovo modello, aggiungi semplicemente la funzionalità audio in background al manifesto dell'app e l'app continuerà automaticamente a riprodurre l'audio quando passa allo sfondo. Due nuovi eventi del ciclo di vita dell'applicazione, EnteredBackground e LeavingBackground, informano l'app quando sta entrando in background e uscendo dal background. Quando l'app passa alle transizioni da o verso lo sfondo, i vincoli di memoria applicati dal sistema possono cambiare, in modo da poter usare questi eventi per controllare il consumo di memoria corrente e liberare risorse per rimanere al di sotto del limite.
Eliminando la complessa comunicazione tra processi e la gestione dello stato, il nuovo modello consente di implementare l'audio in background molto più rapidamente con una riduzione significativa del codice. Tuttavia, il modello a due processi è ancora supportato nella versione corrente per la compatibilità con le versioni precedenti. Per altre informazioni, vedere modello audio in background legacy.
Requisiti per l'audio in background
L'app deve soddisfare i requisiti seguenti per la riproduzione audio mentre l'app è in background.
- Aggiungere la funzionalità riproduzione multimediale in background al manifesto dell'app, come descritto più avanti in questo articolo.
- Se la tua app disabilita l'integrazione automatica di MediaPlayer con i controlli SMTC (System Media Transport Controls), ad esempio impostando la proprietà CommandManager.IsEnabled su false, devi implementare l'integrazione manuale con i controlli SMTC per abilitare la riproduzione multimediale in background. Devi anche integrare manualmente con SMTC se usi un'API diversa da MediaPlayer, ad esempio AudioGraph, per riprodurre l'audio se vuoi che l'audio continui a essere riprodotto quando l'app passa allo sfondo. I requisiti minimi di integrazione SMTC sono descritti nella sezione "Utilizzare i controlli multimediali di sistema per l'audio in background" di Controllo manuale dei controlli di trasporto multimediale di sistema.
- Mentre l'app è in background, devi rimanere al di sotto dei limiti di utilizzo della memoria impostati dal sistema per le app in background. Le linee guida per la gestione della memoria in background sono disponibili più avanti in questo articolo.
Funzione di descrizione per la riproduzione multimediale in background
Per abilitare l'audio in background, devi aggiungere la funzionalità di riproduzione multimediale in background al file manifesto dell'app Package.appxmanifest.
Per aggiungere funzionalità al manifesto dell'app usando la finestra di progettazione del manifesto
- In Microsoft Visual Studio, in Esplora Soluzioni, apri la finestra di progettazione per il manifesto dell'applicazione facendo doppio clic sull'elemento package.appxmanifest.
- Selezionare la scheda Funzionalità .
- Selezionare la casella di controllo riproduzione multimediale in background.
Per impostare la funzionalità modificando manualmente il file XML del manifesto dell'app, assicurarsi prima di tutto che il prefisso dello spazio dei nomi uap3 sia definito nell'elemento Package. In caso contrario, aggiungerlo come illustrato di seguito.
<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">
Quindi, aggiungi la funzionalità backgroundMediaPlayback all'elemento Capabilities:
<Capabilities>
<uap3:Capability Name="backgroundMediaPlayback"/>
</Capabilities>
Gestire la transizione tra primo piano e sfondo
Quando l'app passa dal primo piano allo sfondo, viene generato l'evento EnteredBackground. Quando l'app torna in primo piano, viene generato l'evento LeavingBackground. Poiché si tratta di eventi del ciclo di vita dell'app, devi registrare i gestori per questi eventi quando viene creata l'app. Nel modello di progetto predefinito questo significa aggiungerlo al costruttore della classe App in App.xaml.cs.
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
this.EnteredBackground += App_EnteredBackground;
this.LeavingBackground += App_LeavingBackground;
}
Creare una variabile per tenere traccia di se sei attualmente in esecuzione in background.
bool _isInBackgroundMode = false;
Quando viene generato l'evento EnteredBackground, impostate la variabile di rilevamento per indicare che l'applicazione è attualmente in esecuzione in background. Non è consigliabile eseguire attività a esecuzione prolungata nell'evento EnteredBackground perché ciò potrebbe far sembrare la transizione allo sfondo lenta all'utente.
private void App_EnteredBackground(object sender, EnteredBackgroundEventArgs e)
{
_isInBackgroundMode = true;
}
Nel LeavingBackground gestore eventi, devi impostare la variabile di monitoraggio per indicare che l'app non è più in esecuzione in background.
private void App_LeavingBackground(object sender, LeavingBackgroundEventArgs e)
{
_isInBackgroundMode = false;
}
Requisiti di gestione della memoria
La parte più importante della gestione della transizione tra primo piano e background consiste nella gestione della memoria usata dall'app. Poiché l'esecuzione in background ridurrà le risorse di memoria che l'app può conservare dal sistema, devi registrarti anche per gli eventi AppMemoryUsageIncreased e AppMemoryUsageLimitChanging. Quando questi eventi vengono generati, è necessario controllare l'utilizzo corrente della memoria dell'app e il limite corrente e quindi ridurre l'utilizzo della memoria, se necessario. Per informazioni sulla riduzione dell'utilizzo della memoria mentre l'app è in esecuzione in background, vedi Libera memoria quando l'app passa allo sfondo.
Disponibilità di rete per le app multimediali in background
Tutte le origini multimediali con riconoscimento della rete, quelle che non vengono create da un flusso o da un file, manterranno attiva la connessione di rete durante il recupero del contenuto remoto e la rilasciano quando non lo sono. MediaStreamSource, in particolare, si basa sull'applicazione per segnalare correttamente l'intervallo memorizzato nel buffer alla piattaforma usando SetBufferedRange. Dopo che l'intero contenuto è completamente bufferizzato, la rete non verrà più riservata per l'app.
Se è necessario effettuare chiamate di rete che avvengono in background quando i media non vengono scaricati, queste devono essere avvolte in un'attività appropriata come MaintenanceTrigger o TimeTrigger. Per ulteriori informazioni, vedere Sostieni la tua app attraverso le attività in background.
Argomenti correlati
- Riproduzione multimediale
- Riprodurre audio e video con MediaPlayer
- Integra con i controlli di trasporto multimediale di sistema
- esempio di audio in background