Delen via


Gegevens delen

In dit artikel wordt uitgelegd hoe u het Share-contract kunt ondersteunen in een desktop- of uwP-app (Universal Windows Platform). Het contract Delen is een eenvoudige manier om snel gegevens te delen, zoals tekst, koppelingen, foto's en video's, tussen apps. Een gebruiker kan bijvoorbeeld een webpagina met zijn vrienden delen met behulp van een sociale netwerk-app of een koppeling opslaan in een notitie-app om later naar te verwijzen.

Opmerking

De codevoorbeelden in dit artikel zijn afkomstig van UWP-apps. Desktop-apps moeten gebruikmaken van de IDataTransferManagerInterop. Zie WinRT UI-objecten weergeven die afhankelijk zijn van CoreWindow voor meer informatie en codevoorbeelden.

U kunt ook verwijzen naar het voorbeeld van de WPF-inhoudsbron-app en Deelopties integreren in uw Windows-app voor aanvullende informatie over het delen van gegevens in desktop-apps.

Een gebeurtenis-handler instellen

Voeg een DataRequested-gebeurtenishandler toe die moet worden aangeroepen wanneer een gebruiker een share aanroept. Dit kan gebeuren wanneer de gebruiker op een besturingselement in uw app tikt (zoals een knop- of app-balkopdracht) of automatisch in een specifiek scenario (als de gebruiker een niveau heeft voltooid en bijvoorbeeld een hoge score krijgt).

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

Wanneer een DataRequested-gebeurtenis optreedt, ontvangt uw app een DataRequest-object . Dit bevat een DataPackage die u kunt gebruiken om de inhoud op te geven die de gebruiker wil delen. U moet een titel en gegevens opgeven die u wilt delen. Een beschrijving is optioneel, maar wordt aanbevolen.

DataRequest request = args.Request;

Gegevens kiezen

U kunt verschillende typen gegevens delen, waaronder:

  • Tekst zonder opmaak
  • Uniform Resource Identifiers (URI's)
  • HTML
  • Opgemaakte tekst
  • Bitmaps
  • Files
  • Aangepaste door ontwikkelaars gedefinieerde gegevens

Het DataPackage-object kan een of meer van deze indelingen bevatten, in elke combinatie. In het volgende voorbeeld ziet u hoe u tekst deelt.

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

Eigenschappen instellen

Wanneer u gegevens inpakt voor delen, kunt u verschillende eigenschappen opgeven die aanvullende informatie bieden over de inhoud die wordt gedeeld. Deze eigenschappen helpen bij het doel van apps om de gebruikerservaring te verbeteren. Een beschrijving helpt bijvoorbeeld wanneer de gebruiker inhoud deelt met meer dan één app. Het toevoegen van een miniatuur bij het delen van een afbeelding of een koppeling naar een webpagina biedt een visuele verwijzing naar de gebruiker. Zie DataPackagePropertySet voor meer informatie.

Waarschuwing

Alle eigenschappen behalve de titel zijn optioneel. De titeleigenschap is verplicht en moet worden ingesteld.

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

De deel-UI starten

Het systeem biedt een gebruikersinterface voor delen. Als u deze wilt starten, roept u de Methode ShowShareUI aan.

DataTransferManager.ShowShareUI();

Afhandeling van fouten

In de meeste gevallen is het delen van inhoud een eenvoudig proces. Er is echter altijd een kans dat er iets onverwachts kan gebeuren. De app kan bijvoorbeeld vereisen dat de gebruiker inhoud selecteert voor delen, maar dat de gebruiker geen inhoud heeft geselecteerd. Als u deze situaties wilt afhandelen, gebruikt u de methode FailWithDisplayText , waarmee een bericht aan de gebruiker wordt weergegeven als er iets misgaat.

Delen met gemachtigden vertragen

Soms is het misschien niet zinvol om de gegevens voor te bereiden die de gebruiker meteen wil delen. Als uw app bijvoorbeeld ondersteuning biedt voor het verzenden van een groot afbeeldingsbestand in verschillende mogelijke indelingen, is het inefficiënt om al deze afbeeldingen te maken voordat de gebruiker de selectie maakt.

Om dit probleem op te lossen, kan een DataPackage een gemachtigde bevatten, een functie die wordt aangeroepen wanneer de ontvangende app gegevens aanvraagt. Het is raadzaam om een gemachtigde te gebruiken wanneer de gegevens die een gebruiker wil delen, resource-intensief is.

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();
    }
}

Zie ook