Delen via


Gegevens ontvangen

In dit artikel wordt uitgelegd hoe u inhoud ontvangt in uw UWP-app (Universal Windows Platform) die wordt gedeeld vanuit een andere app met behulp van een Share-contract. Met dit Share-contract kan uw app worden weergegeven als een optie wanneer de gebruiker Share aanroept.

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.

Uw app declareren als een sharedoel

In het systeem wordt een lijst met mogelijke doel-apps weergegeven wanneer een gebruiker Share aanroept. Als u in de lijst wilt verschijnen, moet uw app declareren dat het ondersteuning biedt voor het Share-contract. Hiermee weet het systeem dat uw app beschikbaar is voor het ontvangen van inhoud.

  1. Open het manifestbestand. Het moet iets worden genoemd als package.appxmanifest.
  2. Open het tabblad Declaraties.
  3. Kies Doel delen in de lijst Beschikbare declaraties en selecteer toevoegen.

Bestandstypen en -indelingen kiezen

Bepaal vervolgens welke bestandstypen en gegevensindelingen u ondersteunt. De Share-API's ondersteunen verschillende standaardindelingen, zoals Tekst, HTML en Bitmap. U kunt ook aangepaste bestandstypen en gegevensindelingen opgeven. Als u dat wel doet, moet u er rekening mee houden dat bron-apps moeten weten wat deze typen en indelingen zijn; anders kunnen deze apps de indelingen niet gebruiken om gegevens te delen.

Registreer u alleen voor indelingen die door uw app kunnen worden verwerkt. Alleen doel-apps die ondersteuning bieden voor de gegevens die worden gedeeld, worden weergegeven wanneer de gebruiker Share aanroept.

Bestandstypen instellen:

  1. Open het manifestbestand. Het moet iets worden genoemd als package.appxmanifest.
  2. Selecteer in het gedeelte Ondersteunde bestandstypen van de pagina DeclaratiesNieuwetoevoegen.
  3. Typ de bestandsnaamextensie die u wilt ondersteunen, bijvoorbeeld '.docx'. U moet de periode opnemen. Als u alle bestandstypen wilt ondersteunen, schakelt u het selectievakje SupportsAnyFileType in.

Om gegevensformaten in te stellen:

  1. Open het manifestbestand.
  2. Open de sectie Gegevensindelingen van de pagina Declaraties en selecteer vervolgens Nieuw toevoegen.
  3. Typ de naam van de gegevensindeling die u ondersteunt, bijvoorbeeld 'Tekst'.

Het afhandelen van de activatie van delen

Wanneer een gebruiker uw app selecteert (meestal door deze te selecteren uit een lijst met beschikbare doel-apps in de deel-gebruikersinterface), wordt er een OnShareTargetActivated gebeurtenis gegenereerd. Uw app moet deze gebeurtenis afhandelen om de gegevens te verwerken die de gebruiker wil delen.

protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
    // Code to handle activation goes here. 
} 

De gegevens die de gebruiker wil delen, bevinden zich in een ShareOperation-object . U kunt dit object gebruiken om de indeling te controleren van de gegevens die het bevat.

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

Status voor delen van rapporten

In sommige gevallen kan het even duren voordat uw app de gegevens verwerkt die ze willen delen. Voorbeelden hiervan zijn gebruikers die verzamelingen bestanden of afbeeldingen delen. Deze items zijn groter dan een eenvoudige tekenreeks, zodat ze langer duren voordat ze worden verwerkt.

shareOperation.ReportStarted(); 

Nadat u ReportStarted hebt aangeroepen, verwacht u geen gebruikersinteractie meer met uw app. Als gevolg hiervan moet u deze niet aanroepen, tenzij uw app zich op een punt bevindt waar deze door de gebruiker kan worden gesloten.

Met een uitgebreide share is het mogelijk dat de gebruiker de bron-app kan sluiten voordat uw app alle gegevens uit het DataPackage-object bevat. Daarom raden we u aan het systeem te laten weten wanneer uw app de gegevens heeft verkregen die nodig zijn. Op deze manier kan het systeem de bron-app indien nodig onderbreken of beëindigen.

shareOperation.ReportSubmittedBackgroundTask(); 

Als er iets misgaat, roept u ReportError aan om een foutbericht naar het systeem te verzenden. De gebruiker ziet het bericht wanneer hij de status van de share controleert. Op dat moment wordt uw app afgesloten en wordt de share beëindigd. De gebruiker moet opnieuw beginnen om de inhoud met uw app te delen. Afhankelijk van uw scenario kunt u besluiten dat een bepaalde fout niet ernstig genoeg is om de deelactie te beëindigen. In dat geval kunt u ervoor kiezen om ReportError- niet aan te roepen en door te gaan met de share.

shareOperation.ReportError("Could not reach the server! Try again later."); 

Ten slotte, als uw app de gedeelde inhoud heeft verwerkt, moet u ReportCompleted aanroepen om het systeem hiervan op de hoogte te stellen.

shareOperation.ReportCompleted();

Wanneer u deze methoden gebruikt, roept u ze meestal aan in de volgorde die zojuist is beschreven en roept u ze niet meer dan één keer aan. Er zijn echter momenten waarop een doeltoepassing ReportDataRetrieved kan aanroepen voordat ReportStarted. De app kan bijvoorbeeld de gegevens ophalen als onderdeel van een taak in de activeringshandler, maar niet ReportStarted aanroepen totdat de gebruiker een knop Delen selecteert.

Wanneer een gebruiker uw app selecteert om inhoud te ontvangen, wordt u aangeraden een QuickLink te maken. Een QuickLink is vergelijkbaar met een snelkoppeling waarmee gebruikers gemakkelijker informatie kunnen delen met uw app. U kunt bijvoorbeeld een quicklink maken waarmee een nieuw e-mailbericht wordt geopend dat vooraf is geconfigureerd met het e-mailadres van een vriend.

Een quicklink moet een titel, een pictogram en een id hebben. De titel (zoals 'E-mail mam') en het pictogram worden weergegeven wanneer de gebruiker op de charm Delen tikt. De id is wat uw app gebruikt voor toegang tot aangepaste gegevens, zoals een e-mailadres of aanmeldingsreferenties. Wanneer uw app een QuickLink maakt, retourneert de app de QuickLink naar het systeem door ReportCompleted aan te roepen.

In een QuickLink worden geen gegevens opgeslagen. In plaats daarvan bevat het een id die, wanneer deze is geselecteerd, naar uw app wordt verzonden. Uw app is verantwoordelijk voor het opslaan van de id van de QuickLink en de bijbehorende gebruikersgegevens. Wanneer de gebruiker op de QuickLink tikt, kunt u de id ophalen via de eigenschap QuickLinkId .

async void ReportCompleted(ShareOperation shareOperation, string quickLinkId, string quickLinkTitle)
{
    QuickLink quickLinkInfo = new QuickLink
    {
        Id = quickLinkId,
        Title = quickLinkTitle,

        // For quicklinks, the supported FileTypes and DataFormats are set 
        // independently from the manifest
        SupportedFileTypes = { "*" },
        SupportedDataFormats = { StandardDataFormats.Text, StandardDataFormats.Uri, 
                StandardDataFormats.Bitmap, StandardDataFormats.StorageItems }
    };

    StorageFile iconFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.CreateFileAsync(
            "assets\\user.png", CreationCollisionOption.OpenIfExists);
    quickLinkInfo.Thumbnail = RandomAccessStreamReference.CreateFromFile(iconFile);
    shareOperation.ReportCompleted(quickLinkInfo);
}

Zie ook