Metro Style App - Share Content

Windows 8 oltre ad essere un sistema operativo è una piattaforma che si integra con le nostre applicazioni e ci permette di arricchirle di funzionalità.
In questo esempio vedremo come è possibile condividere dati tra applicazioni.

Il caso che analizzeremo riguarda  una applicazione che mostra fotografie e vogliamo che possano essere condivise ad un indirizzo mail.
Nel modello classico windows dovremmo: salvare l’immagine, aprire un client di posta, allegare l’immagine e in fine inviarla.
Oppure potremmo integrare la nostra applicazione con un client di posta, ma se invece di una mail volessimo twittare o postare la foto su facebook?

Per rispondere a tutte queste esigenze Win8 mette a disposizione i Contracts che rappresenta il modello che permette alle applicazioni di comunicare tra di loro.
Ogni applicazione dichiara quali sono i contratti che è in grado di gestire:

  • Search: Funzione di ricerca estesa a tutte le altre applicazioni
  • Share: L’app può essere usata per condividere informazioni con e da altre applicazioni
  • AutoPlay: Attraverso la share charm l’app può inviare contenuti digitali a device DLNA compliant
  • Settings: La gestione dei settings è parte della experience di Windows 8
  • App to app picking: L’app diventa target di un operazione «Apri file»

Ritorniamo al nostro esempio e vediamo come è possibile realizzarlo.

Creiamo una nuova Blanck Application e inseriamo il seguente Xaml nella pagina

<Grid Background="{StaticResource ApplicationPageBackgroundBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Image      Grid.Row="0" x:Name="Photo"  Width="500" Height="383" Source="Images/Image1.jpg" />
    <TextBlock  Grid.Row="1" x:Name="Title" Text="A poem is a city" HorizontalAlignment="Center" FontSize="36" />
    <TextBlock  Grid.Row="2" x:Name="Description" HorizontalAlignment="Center" FontSize="14" >
        a poem is a city filled with streets and sewers <LineBreak/>
        filled with saints, heroes, beggars, madmen, <LineBreak/>
        ...
    </TextBlock>
</Grid>

Il risultato sarà il seguente:

image

A questo punto scriviamo il codice che consente di esporre dati verso altre applicazioni.
Abbiamo a disposizione una serie di metodi per ogni evenienza:
- SetUri per impostare un url
- SetText per del testo
- SetBitmap per le immagini
- SetStorageItems per un file allegato
In oltre abbiamo la possibilità di dare una titolo e una descrizione allo share e di utilizzare la property FailWithDisplayText per dare messaggi di errore in caso di problemi.

public BlankPage()
{
    this.InitializeComponent();

    DataTransferManager datatransferManager = DataTransferManager.GetForCurrentView();
    datatransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.DataRequested);
}

async void DataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
    e.Request.Data.Properties.Title = Title.Text;
    e.Request.Data.Properties.Description = "Share content with ...";

    var image = await Package.Current.InstalledLocation.GetFileAsync(@"Images\Image1.jpg");
    var imageList = new List<StorageFile>();
    imageList.Add(image);
    e.Request.Data.SetStorageItems(imageList);
}

Una volta lanciata la nostra applicazione accediamo alla Charms bar e selezioniamo la voce Share.

image

Abbiamo la possibilità scegliere l’applicazione con cui condividere i dati.

image

Selezioniamo la app Mail e ci viene proposta una mail già pronta da inviare.

image

Potete scaricare il codice dell’esempio da qui.

Tag di Technorati: ,,,,
«March»
SunMonTueWedThuFriSat
26272829123
45678910
11121314151617
18192021222324
25262728293031
1234567