Condividere dati con altre applicazioni in Windows 8

9 gennaio 2013

Quello che dobbiamo fare è registrare la nostra applicazione presso il Data Transfer Manager, ossia il componente del sistema operativo che gestisce lo scambio di informazioni fra applicazioni (rappresentato dalla classe DataTransferManager), e implementare un handler per rispondere all’evento DataRequested scatenato dal sistema operativo (dal Windows Runtime) all’attivazione del charm di Share. Nella pagina MainPage.xaml.cs aggiungiamo il codice necessario:

public MainPage()
{
  this.InitializeComponent();
  
  var biz = new Biz();
  
  this.list.ItemsSource = biz.GetAllBikes();
  
  // <parte da aggiungere> 
  
  var dataTransferManager = DataTransferManager.GetForCurrentView();
  
  dataTransferManager.DataRequested += new TypedEventHandler(MainPage_DataRequested);
  
  // </parte da aggiungere>  
}

Esaminiamo l’aggiunta: in un’applicazione Windows 8 ogni pagina è associata a uno specifico Data Transfer Manager, quindi il metodo GetForCurrentView si preoccupa di recuperare quello associato alla pagina corrente. La riga che segue, invece, semplicemente si “abbona” all’evento DataRequested sollevato da WinRT (Windows Runtime).

Esaminiamo adesso l’implementazione del metodo per la gestione del relativo evento:

private void MainPage_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
  args.Request.Data.Properties.Title = "DevLeap Sharing App";
  
  if (list.SelectedItem != null)
  {
    args.Request.Data.Properties.Description = "DevLeap is sharing: " +list.SelectedValue.ToString();
	args.Request.Data.SetText("Ciao, la mia prossima bici sarà una: " + list.SelectedValue.ToString());
  }
  else
  {
    args.Request.FailWithDisplayText("Non hai selezionato alcuna bici");
  }
}

L’implementazione dell’handler dell’evento merita di essere approfondito. Ciò che effettivamente viene passato da un’applicazione all’altra durante la condivisione è un particolare modello di “pacchetto dati” denominato, non a caso, DataPackage (rappresentato dalla proprietà Data della classe DataRequest, ricevuta come argomento dell’evento all’interno dalla classe DataRequestedEventArgs).

Questa classe contiene una serie di proprietà e di metodi predefiniti che consentono non solo di passare da un’applicazione all’altra particolari tipologie di contenuti (come i metodi SetText per il testo e SetHtmlFormat per contenuto HTML), ma anche di “decorare” tale contenuto con “attributi” che ne descrivano meglio il contenuto (raccolti nella proprietà Properties di tipo DataPackagePropertySet, come ad esempio Title, Description, ApplicationName, FileTypes, etc., i cui nomi dovrebbero risultare abbastanza auto esplicativi; per ulteriori approfondimenti si rinvia alla relativa documentazione su msdn).

Nel nostro caso, dopo esserci accertati che l’utente abbia effettivamente selezionato un modello di mountain bike da condividere (list.SelectedItem != null) e dopo aver impostato le proprietà Title e Description con del testo d’esempio, abbiamo fornito al Data Transfer Manager il contenuto da condividere mediante il metodo SetText, passando come parametro il nome del modello di mountain bike selezionato.

Eseguiamo l’applicazione, selezioniamo un item dalla lista e clicchiamo il charm di Search (per attivare la Charms Bar è sufficiente posizionare il mouse nell’angolo in basso a sinistra dello schermo).

Figura 6.
(clic per ingrandire)

Se selezioniamo Mail come applicazione di condivisione, ecco quello che otteniamo:

Figura 7.
(clic per ingrandire)

Infine, nel caso in cui l’utente prema il charm di Share senza aver prima selezionato alcunché dalla lista, l’operazione di condivisone viene interrotta e ne informiamo il sistema operativo (e di conseguenza l’utente) utilizzando il metodo autoesplicativo FailWithDisplayText. Questo è il risultato (da notare come il testo “There is nothing to share right now” sia in realtà un testo di default che il pannello di Share mostra all’utente ogniqualvolta il metodo FailWithDisplayText viene invocato):

Figura 8.
(clic per ingrandire)

È possibile condividere un’immagine, ad esempio l’immagine della bici selezionata utilizzando il metodo SetBitmap a cui deve essere passato ovviamente lo stream che rappresenta l’immagine stessa. In questo caso, il Windows Runtime avrebbe elencato solo le applicazioni in grado di ricevere, oltre al testo, anche una bitmap.

È inoltre possibile attivare la funzionalità anche dal codice dell’applicazione tramite il metodo ShowShareUI della classe DataTransferManager nel caso in cui una operazione sulla user interface debba corrispondere alla condivisione di dati: ad esempio, la selezione di un elemento potrebbe essere fatta all’interno di una pagina apposita di condivisione e quindi attivare in automatico la funzione di share senza bisogno che l’utente apra la charms bar.

Il contratto di share regola lo scambio dati fra applicazioni che non si devono conoscere a priori. È sufficiente implementare il contratto in una applicazione che condivide dei dati abbonandosi all’evento che il sistema operativo (WinRT in realtà) scatena a fronte della richiesta di condivisione e fornire il package che contiene le informazioni da condividere.

>> Leggi come creare una applicazione che aderisce allo Share Contract di Windows 8 lato ‘target’

Tutte le lezioni

1 ... 9 10 11 ... 28

Se vuoi aggiornamenti su Condividere dati con altre applicazioni in Windows 8 inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Condividere dati con altre applicazioni in Windows 8

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy