Guida introduttiva: aggiornare un riquadro animato da un'attività in background

Applies to Windows and Windows Phone

Usa un'attività in background per aggiornare il riquadro animato della tua app con nuovi contenuti.

Ecco un video che illustra come aggiungere riquadri animati alle tue app.

Prerequisiti

In questo argomento partiamo dal presupposto che tu sappia come creare una semplice app di Windows Runtime in C++, C# o Visual Basic. Per istruzioni sulla creazione della tua prima app di Windows Store, vedi Creazione della prima app di Windows Runtime in C++, C# o Visual Basic.

Per usare il codice descritto in questa sezione, avrai bisogno di quanto segue:

  • Windows 8
  • Microsoft Visual Studio Express 2012 per Windows 8

Creare il progetto di attività in background

Per abilitare un riquadro animato per la tua app, aggiungi un nuovo progetto di componente Windows Runtime alla tua soluzione. Si tratta di un assembly distinto caricato ed eseguito dal sistema operativo in background quando un utente installa la tua app.

  1. In Esplora soluzioni fai clic con il pulsante destro del mouse sulla soluzione, scegli Aggiungi, quindi tocca o fai clic su Nuovo progetto.
  2. Nella finestra di dialogo Aggiungi nuovo progetto seleziona il modello di componente Windows Runtime nella sezione Visual C# > Windows Store.
  3. Assegna al progetto il nome BackgroundTasks e tocca o fai clic su OK. Microsoft Visual Studio aggiungerà il nuovo progetto alla soluzione.
  4. Nel progetto principale aggiungi un riferimento al progetto BackgroundTasks.

Implementare l'attività in background

Implementa l'interfaccia IBackgroundTask per creare una classe che aggiorni il riquadro animato dell'app. Le operazioni in background vanno nel metodo Run. In questo caso, l'attività recupera un feed di diffusione dei blog MSDN. Per impedire la chiusura anomala dell'attività durante l'esecuzione del codice asincrono, ottieni un differimento.

  1. In Esplora soluzioni rinomina il file generato automaticamente Class1.cs in BlogFeedBackgroundTask.cs.
  2. In BlogFeedBackgroundTask.cs sostituisci il codice generato automaticamente con il codice dello stub per la classe BlogFeedBackgroundTask.
  3. Nell'implementazione del metodo Run aggiungi il codice per i metodi GetMSDNBlogFeed e UpdateTile.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// Added during quickstart
using Windows.ApplicationModel.Background;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using Windows.Web.Syndication;

namespace BackgroundTasks
{
    public sealed class BlogFeedBackgroundTask  : IBackgroundTask
    {
        public async void Run( IBackgroundTaskInstance taskInstance )
        {
            // Get a deferral, to prevent the task from closing prematurely 
            // while asynchronous code is still running.
            BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

            // Download the feed.
            var feed = await GetMSDNBlogFeed();

            // Update the live tile with the feed items.
            UpdateTile( feed );

            // Inform the system that the task is finished.
            deferral.Complete();
        }

        private static async Task<SyndicationFeed> GetMSDNBlogFeed()
        {
            SyndicationFeed feed = null;

            try
            {
                // Create a syndication client that downloads the feed.  
                SyndicationClient client = new SyndicationClient();
                client.BypassCacheOnRetrieve = true;
                client.SetRequestHeader( customHeaderName, customHeaderValue );

                // Download the feed. 
                feed = await client.RetrieveFeedAsync( new Uri( feedUrl ) );
            }
            catch( Exception ex )
            {
                Debug.WriteLine( ex.ToString() );
            }

            return feed;
        }

        private static void UpdateTile( SyndicationFeed feed )
        {
            // Create a tile update manager for the specified syndication feed.
            var updater = TileUpdateManager.CreateTileUpdaterForApplication();
            updater.EnableNotificationQueue( true );
            updater.Clear();

            // Keep track of the number feed items that get tile notifications. 
            int itemCount = 0;

            // Create a tile notification for each feed item.
            foreach( var item in feed.Items )
            {
                XmlDocument tileXml = TileUpdateManager.GetTemplateContent( TileTemplateType.TileWideText03 );

                var title = item.Title;
                string titleText = title.Text == null ? String.Empty : title.Text;
                tileXml.GetElementsByTagName( textElementName )[0].InnerText = titleText;

                // Create a new tile notification. 
                updater.Update( new TileNotification( tileXml ) );

                // Don't create more than 5 notifications.
                if( itemCount++ > 5 ) break;
            }
        }

        // Although most HTTP servers do not require User-Agent header, others will reject the request or return 
        // a different response if this header is missing. Use SetRequestHeader() to add custom headers. 
        static string customHeaderName = "User-Agent";
        static string customHeaderValue = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";

        static string textElementName = "text";
        static string feedUrl = @"http://blogs.msdn.com/b/MainFeed.aspx?Type=BlogsOnly";
    }
}


Configurare il manifesto del pacchetto

Per configurare il manifesto del pacchetto, aprilo e aggiungi una nuova dichiarazione di attività in background. Imposta il punto di ingresso per l'attività sul nome della classe, incluso il relativo spazio dei nomi.

  1. In Esplora soluzioni apri Package.appxmanifest.
  2. Tocca o fai clic sulla scheda Dichiarazioni.
  3. In Dichiarazioni disponibili seleziona BackgroundTasks e fai clic su Aggiungi. Visual Studio aggiungerà BackgroundTasks a Dichiarazioni supportate.
  4. In Tipi di attività supportati verifica che sia selezionato Timer.
  5. In Impostazioni applicazione imposta il punto di ingresso su BackgroundTasks.BlogFeedBackgroundTask.
  6. Tocca o fai clic sulla scheda Interfaccia utente dell'applicazione.
  7. Imposta Notifiche schermata di blocco su Testo icona e badge.
  8. Imposta il percorso di un'icona da 24x24 pixel nel campo Logo badge.

    Importante  Questa icona deve usare solo pixel monocromatici e trasparenti.

  9. Nel campo Logo piccolo imposta il percorso di un'icona da 30x30 pixel.
  10. Nel campo Logo grande imposta il percorso di un'icona da 310x150 pixel.

Registrare l'attività in background

Crea un elemento BackgroundTaskBuilder per registrare l'attività.

Nota  

A partire da Windows 8.1, i parametri di registrazione dell'attività in background vengono convalidati al momento della registrazione. Se uno dei parametri di registrazione non è valido, viene restituito un errore. L'app deve essere in grado di gestire scenari in cui si verifica un errore di registrazione dell'attività in background. Puoi ad esempio usare un'istruzione condizionale per controllare la presenza di errori di registrazione e quindi eseguire un nuovo tentativo in caso di errore della registrazione usando valori dei parametri diversi.

Nella pagina principale dell'app aggiungi il metodo RegisterBackgroundTask e chiamalo nel gestore di eventi OnNavigatedTo.


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Windows.ApplicationModel.Background;
using Windows.Data.Xml.Dom;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Web.Syndication;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238

namespace ContosoApp
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo( NavigationEventArgs e )
        {
            this.RegisterBackgroundTask();
        }


        private async void RegisterBackgroundTask()
        {
            var backgroundAccessStatus = await BackgroundExecutionManager.RequestAccessAsync();
            if( backgroundAccessStatus == BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity ||
                backgroundAccessStatus == BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity )
            {
                foreach( var task in BackgroundTaskRegistration.AllTasks )
                {
                    if( task.Value.Name == taskName )
                    {
                        task.Value.Unregister( true );
                    }
                }

                BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
                taskBuilder.Name = taskName;
                taskBuilder.TaskEntryPoint = taskEntryPoint;
                taskBuilder.SetTrigger( new TimeTrigger( 15, false ) );
                var registration = taskBuilder.Register();
            }
        }

        private const string taskName = "BlogFeedBackgroundTask";
        private const string taskEntryPoint = "BackgroundTasks.BlogFeedBackgroundTask";
    }
}


Eseguire il debug dell'attività in background

Per eseguire il debug dell'attività in background, imposta un punto di interruzione nel metodo Run dell'attività. Sulla barra degli strumenti Posizione di debug seleziona l'attività in background. In questo modo il sistema chiama immediatamente il metodo Run.

  1. Imposta un punto di interruzione nel metodo Run dell'attività.
  2. Premi F5 o tocca Debug > Avvia debug per distribuire ed eseguire l'app.
  3. Dopo l'avvio dell'app, torna a Visual Studio.
  4. Verifica che la barra degli strumenti Posizione di debug sia visibile. Si trova nel menu Visualizza > Barre degli strumenti.
  5. Sulla barra degli strumenti Posizione di debug fai clic sul menu a discesa Sospendi e seleziona BlogFeedBackgroundTask.
  6. Visual Studio sospenderà l'esecuzione in corrispondenza del punto di interruzione.
  7. Premi F5 o tocca Debug > Avvia debug per continuare a eseguire l'app.
  8. Premi MAIUSC+F5 o tocca Debug > Termina debug per interrompere il debug.
  9. Torna al riquadro dell'app nella schermata Start. Dopo alcuni secondi nel riquadro dell'app verranno visualizzate notifiche di tipo riquadro.

Riepilogo

Puoi ora aggiungere aggiornamenti del riquadro animato all'app e mostrare agli utenti nuovi contenuti aggiornati periodicamente.

Argomenti correlati

BackgroundTaskBuilder
TileUpdateManager
TileNotification
Supporto dell'app con attività in background
Linee guida ed elenco di controllo per i riquadri e le notifiche

 

 

Mostra:
© 2014 Microsoft