Sviluppo di Windows 10 - Contratto di condivisione
In questo capitolo impareremo come condividere i dati tra le applicazioni. Gli utenti spesso trovano informazioni che sono entusiasti di condividere con qualcuno o di utilizzarle in un'altra applicazione. Al giorno d'oggi, gli utenti desiderano utilizzare la tecnologia per connettersi e condividere con altre persone.
Un utente potrebbe voler condividere -
- Un collegamento con il loro social network
- Copia un'immagine in un rapporto
- Carica un file nell'archivio cloud
Le applicazioni odierne devono garantire che i dati che utilizzano siano disponibili anche per la condivisione e lo scambio da parte degli utenti. La condivisione è una funzionalità leggera, facile da aggiungere alla tua applicazione UWP. Esistono diversi modi in cui le app possono scambiare dati con altre app.
Nelle applicazioni UWP, la funzione di condivisione può essere supportata nei seguenti modi;
Innanzitutto, l'applicazione può essere un'app di origine che fornisce il contenuto che l'utente desidera condividere.
In secondo luogo, l'app può essere un'app di destinazione che l'utente seleziona come destinazione per il contenuto condiviso.
Un'app può anche essere sia un'app di origine che un'app di destinazione.
Condivisione di contenuti
La condivisione di contenuti da un'applicazione, che è un'app di origine, è molto semplice. Per eseguire qualsiasi operazione di condivisione, avrai bisogno del fileDataPackageoggetto di classe. Questo oggetto contiene i dati che l'utente desidera condividere.
I seguenti tipi di contenuto possono essere inclusi in DataPackage oggetto -
- Testo normale
- Identificatori di risorse uniformi (URI)
- HTML
- Testo formattato
- Bitmaps
- Files
- Dati definiti dallo sviluppatore
Durante la condivisione dei dati, puoi includere uno o più dei formati sopra menzionati. Per supportare la condivisione nella tua applicazione, devi prima ottenere l'istanza del fileDataTransferManager classe.
Quindi registrerà un gestore di eventi che viene chiamato ogni volta che un file DataRequested si verifica l'evento.
DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager,
DataRequestedEventArgs>(this.ShareTextHandler);
Quando la tua app riceve un file DataRequest oggetto, quindi la tua applicazione è pronta per aggiungere il contenuto che l'utente desidera condividere.
private void ShareTextHandler(DataTransferManager sender, DataRequestedEventArgs e){
DataRequest request = e.Request;
// The Title is mandatory
request.Data.Properties.Title = "Share Text Example";
request.Data.Properties.Description = "A demonstration that shows how to share text.";
request.Data.SetText("Hello World!");
}
Qualsiasi contenuto condiviso dall'applicazione deve contenere due proprietà:
- Una proprietà Title, che è obbligatoria e deve essere impostata.
- Il contenuto stesso.
Ricezione di contenuti condivisi
Se vuoi che la tua applicazione possa ricevere contenuti condivisi, la prima cosa che devi fare è dichiarare che supporta l'estensione Share Contract. Dopo la dichiarazione, il sistema renderà disponibile la tua applicazione per ricevere i contenuti.
Per aggiungere il supporto del contratto di condivisione:
Fare doppio clic sul file package.appmanifest file.
Vai al Declarationstab. ScegliereShare Target dal Available Declarations e fare clic sul file Add pulsante.
Se desideri che la tua applicazione riceva qualsiasi tipo di file come contenuto condiviso, puoi specificare i tipi di file e i formati dei dati.
Per specificare i formati di dati supportati, vai a Data Formats sezione, del Declarations pagina e fare clic Add New.
Digita il nome del formato dati che supporti. Per esempio,"Text".
Per specificare il tipo di file supportato, nel file Supported File Types sezione del Declarations pagina, fare clic su Add New.
Digita l'estensione del nome del file che desideri supportare, ad es. .pdf
Se vuoi supportare All file tipi, controlla il file SupportsAnyFileType scatola.
Quando un utente seleziona la tua applicazione come applicazione di destinazione per la condivisione dei dati, allora OnShareTargetActivated l'evento viene generato.
La tua app deve gestire questo evento per elaborare i dati che l'utente desidera condividere.
protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args) {
// Code to handle activation goes here.
}
Tutti i dati che l'utente vuole condividere con qualsiasi applicazione sono contenuti in un file ShareOperationoggetto. Puoi anche controllare il formato dei dati che contiene.
Di seguito è riportato lo snippet di codice che gestisce shared content in formato testo normale.
ShareOperation shareOperation = args.ShareOperation;
if (shareOperation.Data.Contains(StandardDataFormats.Text)) {
string text = await shareOperation.Data.GetTextAsync();
// To output the text from this example, you need a TextBlock control
// with a name of "sharedContent".
sharedContent.Text = "Text: " + text;
}
Diamo un'occhiata a un semplice esempio creando un nuovo progetto UWP, che condividerà un collegamento web.
Di seguito è riportato il codice XAML in cui viene creato un pulsante con alcune proprietà.
<Page
x:Class = "UWPSharingDemo.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPSharingDemo"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Orientation = "Vertical">
<TextBlock Text = "Share Web Link" Style = "{StaticResource
HeaderTextBlockStyle}" Margin = "30"></TextBlock>
<Button Content = "Invoke share contract" Margin = "10"
Name = "InvokeShareContractButton" Click = "InvokeShareContractButton_Click"
></Button>
</StackPanel>
</Grid>
</Page>
Codice C # in cui viene implementato l'evento clic del pulsante e di seguito viene fornito un codice di condivisione dell'URI.
using System;
using Windows.ApplicationModel.DataTransfer;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPSharingDemo {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page {
DataTransferManager dataTransferManager;
public MainPage() {
this.InitializeComponent();
dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += dataTransferManager_DataRequested;
}
void dataTransferManager_DataRequested(DataTransferManager sender,
DataRequestedEventArgs args) {
Uri sharedWebLink = new Uri("https://msdn.microsoft.com");
if (sharedWebLink != null) {
DataPackage dataPackage = args.Request.Data;
dataPackage.Properties.Title = "Sharing MSDN link";
dataPackage.Properties.Description = "The Microsoft Developer Network (MSDN)
is designed to help developers write applications using Microsoft
products and technologies.";
dataPackage.SetWebLink(sharedWebLink);
}
}
private void InvokeShareContractButton_Click(object sender, RoutedEventArgs e) {
DataTransferManager.ShowShareUI();
}
}
}
Quando il codice sopra è stato compilato ed eseguito, vedrai la pagina seguente sull'emulatore.
Quando si fa clic sul pulsante, verranno fornite le opzioni per condividere su quale applicazione.
Fare clic su messaggistica e verrà visualizzata la seguente finestra da cui è possibile inviare il collegamento a chiunque.