Freigeben über


Freigeben von Daten

In diesem Artikel wird erläutert, wie der Freigabe-Vertrag in einer UWP-App (Universelle Windows-Plattform) unterstützt wird. Der Freigabe-Vertrag ist eine einfache Möglichkeit, Daten wie z. B. Text, Links, Fotos und Videos schnell für andere Apps freizugeben. Ein Benutzer möchte beispielsweise mit einer App für ein soziales Netzwerk eine Webseite mit seinen Freunden teilen, oder er möchte in einer Notiz-App einen Link für eine spätere Verwendung speichern.

Hinweis

Die Codebeispiele in diesem Artikel stammen aus UWP-Apps. Desktop-Apps sollten den IDataTransferManagerInterop verwenden. Weitere Informationen und Codebeispiele finden Sie unter Anzeigen von WinRT-UI-Objekten, die von CoreWindow abhängen. Weitere Informationen finden Sie auch im Beispiel für die Quell-App für WPF-Freigabeinhalte.

Einrichten eines Ereignishandlers

Fügen Sie einen DataRequested-Ereignishandler hinzu, der aufgerufen werden soll, wenn ein Benutzer die Freigabe aufruft. Dies kann vorkommen, wenn der Benutzer auf ein Steuerelement in Ihrer App tippt (z. B. eine Schaltfläche oder einen App-Leistenbefehl) oder automatisch in einem bestimmten Szenario (wenn der Benutzer eine Stufe beendet und beispielsweise einen Highscore erhält).

DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += DataTransferManager_DataRequested;

Wenn ein DataRequested-Ereignis auftritt, empfängt Ihre App ein DataRequest-Objekt. Dieses enthält ein DataPackage, das Sie verwenden können, um den Inhalt bereitzustellen, den der Benutzer freigeben möchte. Sie müssen einen Titel und Daten angeben, die freigegeben werden sollen. Eine Beschreibung ist optional, aber empfohlen.

DataRequest request = args.Request;

Auswählen von Daten

Sie können verschiedene Arten von Daten freigeben, unter anderem:

  • Nur-Text
  • Uniform Resource Identifiers (URIs)
  • HTML
  • Formatierter Text
  • Bitmaps
  • Dateien
  • Benutzer- und entwicklerdefinierte Daten

Das DataPackage-Objekt kann eines oder mehrere dieser Formate in beliebiger Kombination enthalten. Im folgenden Beispiel wird das Freigeben von Text veranschaulicht.

request.Data.SetText("Hello world!");

Eigenschaften festlegen

Wenn Sie Daten für die Freigabe verpacken, können Sie eine Vielzahl von Eigenschaften bereitstellen, die zusätzliche Informationen zu den freigegebenen Inhalten bereitstellen. Diese Eigenschaften helfen Ziel-Apps, die Benutzererfahrung zu verbessern. Eine Beschreibung hilft beispielsweise, wenn der Benutzer Inhalte für mehrere Apps freigibt. Das Hinzufügen einer Miniaturansicht beim Freigeben eines Bilds oder eines Links zu einer Webseite stellt einen visuellen Verweis für den Benutzer bereit. Weitere Informationen finden Sie unter DataPackagePropertySet.

Warnung

Alle Eigenschaften mit Ausnahme des Titels sind optional. Die Title-Eigenschaft ist obligatorisch und muss festgelegt werden.

request.Data.Properties.Title = "Share Example";
request.Data.Properties.Description = "A demonstration on how to share";

Starten der Freigabe-UI

Eine Benutzeroberfläche für die Freigabe wird vom System bereitgestellt. Rufen Sie zum Starten die ShowShareUI-Methode auf.

DataTransferManager.ShowShareUI();

Umgang mit Fehlern

In den meisten Fällen ist das Freigeben von Inhalten ein einfacher Prozess. Es besteht jedoch immer die Möglichkeit, dass etwas Unerwartetes passieren könnte. Die App kann z. B. erfordern, dass der Benutzer Inhalte für die Freigabe auswählt, aber der Benutzer hat keine ausgewählt. Verwenden Sie zum Behandeln dieser Situationen die FailWithDisplayText-Methode, die dem Benutzer eine Meldung anzeigt, wenn ein Fehler auftritt.

Verzögern der Freigabe für Stellvertretungen

Manchmal ist es möglicherweise nicht sinnvoll, die Daten vorzubereiten, die der Benutzer sofort freigeben möchte. Wenn Ihre App beispielsweise das Senden einer großen Bilddatei in verschiedenen möglichen Formaten unterstützt, ist es ineffizient, alle diese Bilder zu erstellen, bevor der Benutzer seine Auswahl trifft.

Um dieses Problem zu lösen, kann ein DataPackage einen Stellvertreter enthalten – eine Funktion, die aufgerufen wird, wenn die empfangende App Daten anfordert. Wir empfehlen die Verwendung eines Stellvertreters, wenn die Daten, die ein Benutzer freigeben möchte, ressourcenintensiv sind.

async void OnDeferredImageRequestedHandler(DataProviderRequest request)
{
    // Provide updated bitmap data using delayed rendering
    if (this.imageStream != null)
    {
        DataProviderDeferral deferral = request.GetDeferral();
        InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();

        // Decode the image.
        BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(this.imageStream);

        // Re-encode the image at 50% width and height.
        BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);
        imageEncoder.BitmapTransform.ScaledWidth = (uint)(imageDecoder.OrientedPixelWidth * 0.5);
        imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
        await imageEncoder.FlushAsync();

        request.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
        deferral.Complete();
    }
}

Siehe auch