Windows Phone 7.1 introduce il supporto ai background agent, una tipologia particolare di applicazioni che restano in esecuzione in backgound, seppure con un set limitato di azioni che possono compiere.
Tra i background agente esiste una specializzazione particolare che prende il nome di audio agent: si tratta di particolari applicazioni in grado di continuare l'esecuzione di audio in background anche mentre l'utente utilizza altre applicazioni.
Per creare un background audio agent, è necessario aggiungere un nuovo tipo di progetto, denominato Windows Phone Audio Playback Agent. In realtà è disponibile anche un progetto dal nome Windows Phone Audio Streaming Agent, che, a dispetto del nome, non va usato quando l'audio è in streaming da un server remoto, ma quando è necessario implementare la logica di decoding necessaria a riprodurre il fusso audio. Se avete un file in uno dei formati supporti da Windows Phone, dovete optare per la prima delle due scelte.
E' necessario, poi, aggiungere una reference a questo progetto appena creato all'interno dell'app vera propria: quest'azione provvederà a registrare il task all'interno del file WMAppManifest.xml.
Fatto questo, verrà create una classe che eredita da AudioPlayerAgent, che è l'agent vero e proprio, all'interno del quale andrà implementata la logica necessaria a gestire la playlist. All'interno di questa classe trovano spazio due routine fondamentali. La prima è OnUserAction, che riceve notifica ogni volta che l'utente effettua un'operazione (Play, Pause, Skip Next, etc) e richiama opportunamente i metodi del player:
protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param)
{
switch (action)
{
case UserAction.Play:
if (player.PlayerState != PlayState.Playing)
player.Play();
break;
case UserAction.Stop:
player.Stop();
break;
case UserAction.Pause:
player.Pause();
break;
...
}
NotifyComplete();
}Generalmente il codice in questo metodo non si discosta molto da quello riportato. La logica vera e propria è contenuta all'interno del metodo OnPlayStateChanged, all'interno del quale vengono ricevute le notifiche sul cambio di stato del player (traccia terminata, pronta, buffering in corso, etc):
protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
{
switch (playState)
{
case PlayState.TrackEnded:
player.Track = GetPreviousTrack();
break;
case PlayState.TrackReady:
player.Play();
break;
...
}
NotifyComplete();
}In entrambi i casi, è particolarmente importante prestare attenzione alla chiamata al metodo NotifyComplete: quest'ultimo serve a segnalare all'agent che il codice ha terminato il proprio lavoro. Attenzione al fatto che, per preservare le risorse, l'istanza degli agent non è sempre attiva, ma viene creata quando necessario.
Il cuore di tutto è rappresentato dall'assegnazione della proprietà Track, all'interno della quale va specificato l'URI (anche remoto, in streaming) della traccia, oltre alle informaziono che appaiono all'interno del player di sistema:

Se la vostra applicazione non dovesse supportare alcune azioni (Next, Previous, Pause), è possibile agire sulla proprietà PlayerControls in fase di istanza della classe. Nell'esempio vengono disattivati i controlli ed impostate le proprietà della traccia audio:
player.Track = new AudioTrack(
new Uri("http://traffic.libsyn.com/wpradio/WPRadio_29.mp3"),
"Titolo",
"Artista",
"Album",
new Uri("http://host/cover.jpg"),
"Tag",
EnabledPlayerControls.None);Per comandare l'esecuzione all'interno dell'applicazione è necessario invocare i metodi della classe BackgroundAudioPlayer, in questo modo:
BackgroundAudioPlayer.Instance.Play();
Attraverso questa classe possiamo anche ricevere gli eventi scatenati dall'agent, che sono necessari per poter visualizzare all'interno dell'applicazione, quando attiva, le notifiche che arrivano dall'agent stesso.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
Testare il failover sulle region in Azure Storage
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Esporre un server MCP esistente con Azure API Management
Self-healing degli unit test con Copilot in GitHub
Importare repository da Bitbucket a GitHub Enterprise Cloud
Introduzione ai web component HTML
Configurare automaticamente un webhook in Azure DevOps
Eliminare record doppi in Sql Server
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Supportare la sessione affinity di Azure App Service con Application Gateway
Eseguire query in contemporanea con EF
I più letti di oggi
- Costruire il web del futuro con HTML5: la nostra guida rapida
- Disponibile al download la versione finale di Internet Explorer 9
- Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
- Utilizzo delle stepped value functions nel CSS
- Impostare automaticamente l'altezza del font tramite CSS
- jQuery raggiunge la versione 1.7
- Disponibile Internet Explorer 10 Platform Preview 2 (IE10 PP2): ancora più supporto ad HTML5
- Miglioramenti agli screen reader e al contrasto in Angular
- Rilasciato jQuery Mobile 1.0
- Selettore CSS :has() e i suoi casi d'uso avanzati


