Mettre à jour une vignette dynamique à partir d’une tâche en arrière-plan
Remarque
Les vignettes Vie sont une fonctionnalité Windows 10 qui n’est pas prise en charge sur les versions ultérieures de Windows. Pour les nouvelles applications, nous vous recommandons de suivre les instructions actuelles pour les icônes d’application.
Utilisez une tâche en arrière-plan pour mettre à jour une vignette dynamique de votre application avec du contenu actualisé.
API importantes
Créer le projet de tâche en arrière-plan
Pour activer une vignette dynamique pour votre application, ajoutez un nouveau projet de composant Windows Runtime à votre solution. Il s’agit d’un assembly distinct que le système d’exploitation charge et s’exécute en arrière-plan lorsqu’un utilisateur installe votre application.
- Dans l’Explorateur de solutions, cliquez avec le bouton droit sur la solution, cliquez sur Ajouter, puis sur Nouveau projet.
- Dans la boîte de dialogue Ajouter un nouveau projet, sélectionnez le modèle de composant Windows Runtime dans la > > section Visual C# > Windows Universal installée.
- Nommez le projet BackgroundTasks, puis cliquez ou appuyez sur OK. Microsoft Visual Studio ajoute le nouveau projet à la solution.
- Dans le projet principal, ajoutez une référence au projet BackgroundTasks.
Implémenter la tâche en arrière-plan
Implémentez l’interface IBackgroundTask pour créer une classe qui met à jour la vignette dynamique de votre application. Votre travail en arrière-plan est exécuté dans la méthode Run. Dans ce cas, la tâche obtient un flux de syndication pour les blogs MSDN. Pour empêcher la fermeture prématuré de la tâche pendant que le code asynchrone est toujours en cours d’exécution, obtenez un report.
- Dans Explorateur de solutions, renommez le fichier généré automatiquement, Class1.cs, en BlogFeedBackgroundTask.cs.
- Dans BlogFeedBackgroundTask.cs, remplacez le code généré automatiquement par le code stub de la classe BlogFeedBackgroundTask .
- Dans l’implémentation de la méthode Run, ajoutez du code pour les méthodes GetMSDNBlogFeed et 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.TileWide310x150Text03 );
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";
}
}
Configurer le manifeste du package
Pour configurer le manifeste du package, ouvrez-le et ajoutez une nouvelle déclaration de tâche en arrière-plan. Définissez le point d’entrée de la tâche sur le nom de la classe, y compris son espace de noms.
- Dans Explorateur de solutions, ouvrez Package.appxmanifest.
- Cliquez ou appuyez sur l’onglet Déclarations .
- Sous Déclarations disponibles, sélectionnez BackgroundTasks , puis cliquez sur Ajouter. Visual Studio ajoute BackgroundTasks sous Déclarations prises en charge.
- Sous Types de tâches pris en charge, vérifiez que le minuteur est vérifié.
- Sous Paramètres de l’application, définissez le point d’entrée sur BackgroundTasks.BlogFeedBackgroundTask.
- Cliquez ou appuyez sur l’onglet Interface utilisateur de l’application.
- Définissez les notifications d’écran de verrouillage sur Badge et Texte de vignette.
- Définissez un chemin d’accès à une icône de 24 x 24 pixels dans le champ logo Badge. Important : Cette icône doit utiliser des pixels monochromes et transparents uniquement.
- Dans le champ Petit logo , définissez un chemin d’accès à une icône de 30 x 30 pixels.
- Dans le champ Logo large , définissez un chemin d’accès à une icône de 310 x 150 pixels.
Inscrire la tâche en arrière-plan
Créez un BackgroundTaskBuilder pour inscrire votre tâche.
Remarque À compter de Windows 8.1, les paramètres d’inscription des tâches en arrière-plan sont validés au moment de l’inscription. Une erreur est retournée si l’un des paramètres d’inscription n’est pas valide. Votre application doit être en mesure de gérer les scénarios où l’inscription des tâches en arrière-plan échoue . Par exemple, utilisez une instruction conditionnelle pour vérifier les erreurs d’inscription, puis réessayez d’enregistrer l’inscription ayant échoué à l’aide de différentes valeurs de paramètre.
Dans la page principale de votre application, ajoutez la méthode RegisterBackgroundTask et appelez-la dans le gestionnaire d’événements 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 https://go.microsoft.com/fwlink/p/?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.AllowedSubjectToSystemPolicy ||
backgroundAccessStatus == BackgroundAccessStatus.AlwaysAllowed )
{
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";
}
}
Déboguer la tâche en arrière-plan
Pour déboguer la tâche en arrière-plan, définissez un point d’arrêt dans la méthode Run de la tâche. Dans la barre d’outils Emplacement de débogage, sélectionnez votre tâche en arrière-plan. Cela entraîne l’appel immédiat de la méthode Run par le système.
- Définissez un point d’arrêt dans la méthode Run de la tâche.
- Appuyez sur F5 ou appuyez sur Déboguer > démarrer le débogage pour déployer et exécuter l’application.
- Une fois l’application lancée, revenez à Visual Studio.
- Vérifiez que la barre d’outils Emplacement de débogage est visible. Il se trouve dans le menu Afficher > les barres d’outils.
- Dans la barre d’outils Emplacement de débogage, cliquez sur la liste déroulante Suspendre , puis sélectionnez BlogFeedBackgroundTask.
- Visual Studio suspend l’exécution au point d’arrêt.
- Appuyez sur F5 ou appuyez sur Debug > Continuer pour continuer à exécuter l’application.
- Appuyez sur Maj+F5 ou appuyez sur Arrêter > le débogage pour arrêter le débogage.
- Revenez à la vignette de l’application sur l’écran de démarrage. Après quelques secondes, les notifications de vignette apparaissent sur la vignette de votre application.