Windows 8 : développer sa première application Modern UI App Windows 8 : gérer le partage d'informations

Aux sections suivantes, vous verrez comment Windows 8 enregistre des informations sur les applications et permet leur intégration à la plateforme. Avant cela, nous devons effectuer une dernière étape.

Lorsque nous avons créé l'application, nous avons déclaré sa capacité à gérer le partage et écrit du code pour passer les informations de partage à sa page principale. Pour recevoir ces informations, ajoutez le code du Listing 2.3. Il récupère simplement les données de la bitmap partagée, les place dans le WriteAbleBitmap et affiche le résultat comme précédemment pour la photo prise depuis la webcam. Le code doit être ajouté dans MainPage.xaml.cs et doit remplacer la méthode OnNavigatedTo vide générée par le modèle. Vous devrez ajouter les instructions using pour Windows.ApplicationsModel.Activation et Windows.ApplicationModel.DataTransfer, ainsi que la déclaration d'un champ _shareOperation.

Listing 2.3 : Code de réception d'une bitmap partagée

protected async override void OnNavigatedTo(NavigationEventArgs e)
{
var args = e.Parameter as ShareTargetActivatedEventArgs;
if (args != null)
{
_shareOperation = args.ShareOperation;

if (_shareOperation.Data.Contains(StandardDataFormats.Bitmap))
{
_bitmap = await _shareOperation.Data.GetBitmapAsync();
await ProcessBitmap();
}
else if (_shareOperation.Data.Contains(StandardDataFormats.
StorageItems))
{
_items = await _shareOperation.Data.GetStorageItemsAsync();
await ProcessStorageItems();
}
else _shareOperation.ReportError(
"Image Helper n'a trouvé aucune bitmap valide.");
}
}

Notez que l'application reconnaît deux formats, dont la bitmap brute. Lorsqu'une bitmap est partagée, une référence de flux sur le contenu est enregistrée, et la bitmap est ensuite chargée de la manière suivante :

private async Task ProcessBitmap()
{
if (_bitmap != null)
{
await LoadBitmap(await _bitmap.OpenReadAsync());
}
}

Certaines applications peuvent faire référence à des photos enregistrées sur l'appareil local. Au lieu de placer le contenu de la photo dans un flux pour l'envoyer à la cible du partage, l'application crée une liste d'éléments de stockage. Ces éléments font référence à des fichiers sur le système, certains d'entre eux pouvant être des images. Le code donné au Listing 2.4 parcourt chaque élément de stockage et charge le premier qui correspond à un format d'image.

Listing 2.4 : Parcourir les éléments de stockage

private async Task ProcessStorageItems()
{
foreach (var item in _items)
{
if (item.IsOfType(StorageItemTypes.File))
{
var file = item as StorageFile;
if (file.ContentType.StartsWith(
"image",
StringComparison.CurrentCultureIgnoreCase))
{
await LoadBitmap(await file.OpenReadAsync());
break;
}
}
}
}