Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il contratto di condivisione Windows consente alla tua app di essere visualizzata nel foglio di condivisione Windows come app di destinazione, consentendo agli utenti di condividere contenuti da altre app direttamente nei tuoi. Questo articolo illustra come gestire il contenuto condiviso dopo l'attivazione dell'app come destinazione di condivisione.
Prima di seguire questa procedura, registrare l'app come destinazione di condivisione:
- App pacchettizzate: Vedere Integrare app pacchettizzate con Condivisione di Windows per la registrazione del manifesto e la configurazione dell'attivazione.
- App non in pacchetto: vedere Integrare app non in pacchetto con Windows Condivisione per informazioni su come concedere l'identità del pacchetto e registrarsi come destinazione di condivisione.
Note
Il modello di attivazione per le app desktop WinUI 3 differisce da UWP. In WinUI 3 l'attivazione della condivisione viene gestita tramite AppInstance.GetActivatedEventArgs() nel codice di avvio dell'app, non tramite Application.OnShareTargetActivated(). Le ShareOperation API e DataPackageView descritte in questo articolo funzionano allo stesso modo dopo aver ottenuto .ShareTargetActivatedEventArgs Vedere Integrare app in pacchetto con Windows Condivisione per il modello di attivazione SDK per app di Windows.
Scegliere i formati di dati da supportare
Quando dichiari l'app come destinazione di condivisione nel manifesto del pacchetto, specifichi i tipi di file e i formati di dati che l'app può ricevere. Solo le app che supportano i formati condivisi vengono visualizzate nel foglio di condivisione.
È possibile configurare i tipi supportati in due modi:
Uso dell'editor del manifesto di Visual Studio:
- Apri
package.appxmanifestin Visual Studio. - Selezionare la scheda Dichiarazioni .
- Scegliere Condividi destinazione dall'elenco Dichiarazioni disponibili e quindi selezionare Aggiungi.
- In Tipi di file supportati aggiungere le estensioni di file gestite dall'app ( ad esempio ,
.jpg)..pngSelezionare SupportsAnyFileType per accettare tutti i tipi di file. - In Formati dati aggiungere i nomi di formato gestiti dall'app (ad esempio,
Text,Uri,Bitmap).
Direttamente nel file XML del manifesto:
<Extensions>
<uap:Extension Category="windows.shareTarget">
<uap:ShareTarget>
<uap:SupportedFileTypes>
<uap:SupportsAnyFileType />
</uap:SupportedFileTypes>
<uap:DataFormat>Text</uap:DataFormat>
<uap:DataFormat>Uri</uap:DataFormat>
<uap:DataFormat>Bitmap</uap:DataFormat>
<uap:DataFormat>StorageItems</uap:DataFormat>
</uap:ShareTarget>
</uap:Extension>
</Extensions>
Registrarsi solo per i formati che l'app può gestire. Se si dichiara un formato ma non è possibile elaborarlo, l'esperienza utente ne risente.
Leggere dati condivisi
Quando l'app viene attivata come destinazione di condivisione, si riceve un oggetto ShareOperation tramite ShareTargetActivatedEventArgs. La proprietà Data è un oggetto DataPackageView che espone il contenuto condiviso.
Usare Contains per verificare quali formati sono disponibili, quindi chiamare il metodo asincrono appropriato per recuperare i dati:
ShareOperation shareOperation = args.ShareOperation;
if (shareOperation.Data.Contains(StandardDataFormats.Text))
{
string text = await shareOperation.Data.GetTextAsync();
// Process the shared text.
}
if (shareOperation.Data.Contains(StandardDataFormats.WebLink))
{
Uri webLink = await shareOperation.Data.GetWebLinkAsync();
// Process the shared link.
}
if (shareOperation.Data.Contains(StandardDataFormats.StorageItems))
{
IReadOnlyList<IStorageItem> items = await shareOperation.Data.GetStorageItemsAsync();
// Process the shared files or folders.
}
Stato di condivisione del report
Se l'elaborazione dei dati condivisi richiede tempo, ad esempio il caricamento di file in un server, segnala lo stato di avanzamento al sistema usando i metodi di stato ShareOperation . In questo modo il sistema gestisce il ciclo di vita dell'app di origine in modo appropriato.
Chiama questi metodi in ordine man mano che l'operazione di condivisione procede:
| Method | Quando chiamare |
|---|---|
| ReportStarted | Non appena l'app inizia a elaborare la condivisione. Dopo questo punto, non aspettatevi un'ulteriore interazione dell'utente con l'interfaccia utente di condivisione. |
| DatiDelReportRecuperati | Dopo che l'app ha ottenuto tutti i dati necessari da DataPackageView. In questo modo il sistema può sospendere o terminare l'app di origine. |
| ReportSubmittedBackgroundTask | Se l'app continua l'elaborazione in background dopo la chiusura dell'interfaccia utente di condivisione. |
| ReportCompletato | Quando l'app ha completato correttamente l'elaborazione del contenuto condiviso. |
| SegnalaErrore | Se si verifica un errore grave. L'utente visualizza il messaggio e termina l'operazione di condivisione. |
shareOperation.ReportStarted();
try
{
string text = await shareOperation.Data.GetTextAsync();
shareOperation.ReportDataRetrieved();
// Perform any additional processing here...
await ProcessSharedDataAsync(text);
shareOperation.ReportCompleted();
}
catch (Exception)
{
shareOperation.ReportError("Something went wrong. Please try again.");
}
Note
Chiamare ReportError solo in caso di errori abbastanza gravi da interrompere l'operazione di condivisione. Per gli errori ripristinabili, è possibile continuare l'elaborazione senza chiamare ReportError.
Note
In alcuni casi un'app di destinazione può chiamare ReportDataRetrieved prima di ReportStarted: ad esempio, se l'app recupera i dati nell'ambito della gestione dell'attivazione, ma chiama ReportStarted solo in un secondo momento, quando l'utente seleziona esplicitamente un pulsante Condividi.
Restituire un collegamento rapido
Quando un utente condivide il contenuto dell'app, puoi restituire un collegamento rapido per velocizzare la condivisione futura. Un QuickLink oggetto viene visualizzato come collegamento nel foglio di condivisione, ad esempio un collegamento di contatto che consente all'utente di condividere rapidamente con tale contatto senza spostarsi nell'interfaccia utente dell'app.
Un QuickLink oggetto ha un titolo, un'icona e un ID. L'ID è l'identificatore interno dell'app per la scorciatoia, ad esempio l'ID di un contatto o il nome di un account. Quando l'utente seleziona in un secondo momento un oggetto QuickLink, il sistema attiva l'app e passa nuovamente l'ID QuickLink tramite ShareOperation.QuickLinkId.
Restituisci un QuickLink passandolo a ReportCompleted:
private async Task ReportCompletedWithQuickLink(
ShareOperation shareOperation, string quickLinkId, string quickLinkTitle)
{
QuickLink quickLinkInfo = new QuickLink
{
Id = quickLinkId,
Title = quickLinkTitle,
// QuickLink supported types are configured independently from the manifest.
SupportedFileTypes = { "*" },
SupportedDataFormats =
{
StandardDataFormats.Text,
StandardDataFormats.WebLink,
StandardDataFormats.Bitmap,
StandardDataFormats.StorageItems
}
};
StorageFile iconFile = await Windows.ApplicationModel.Package.Current
.InstalledLocation.CreateFileAsync(
"assets\\contact.png", CreationCollisionOption.OpenIfExists);
quickLinkInfo.Thumbnail = RandomAccessStreamReference.CreateFromFile(iconFile);
shareOperation.ReportCompleted(quickLinkInfo);
}
Note
Un QuickLink memorizza solo l'ID, non i dati associati. L'app è responsabile della persistenza di tutti i dati utente (ad esempio i dettagli di contatto) e di recuperarli quando QuickLink viene attivato tramite ShareOperation.QuickLinkId.
Vedere anche
- Condividere contenuto dall'app Windows
- Integra le applicazioni impacchettate con Windows Share
- Integrare app non in pacchetto con Windows Share
- Implementazione del contratto di condivisione per SDK per app di Windows
- ShareOperation
- DataPackageView
- Link Rapido
- Informazioni di riferimento sullo schema ShareTarget