Příjem sdílených dat v aplikaci Windows

Kontrakt Share systému Windows umožňuje vaší aplikaci zobrazit se na panelu Sdílet ve Windows jako cílová aplikace – takže uživatelé můžou sdílet obsah z jiných aplikací přímo do vaší aplikace. Tento článek vysvětluje, jak zpracovat sdílený obsah po aktivaci aplikace jako cíle sdílení.

Než budete postupovat podle těchto kroků, zaregistrujte aplikaci jako cíl sdílení:

Note

Aktivační model desktopových aplikací WinUI 3 se liší od UPW. Ve WinUI 3 se aktivace sdílení zpracovává prostřednictvím AppInstance.GetActivatedEventArgs() spouštěcího kódu aplikace , ne prostřednictvím Application.OnShareTargetActivated(). ShareOperation Rozhraní API DataPackageView, popsaná v tomto článku, fungují po získání ShareTargetActivatedEventArgs stejným způsobem. Informace o způsobu aktivace Windows App SDK najdete v tématu Integrace zabalených aplikací se službou Windows Share.

Zvolte formáty dat, které chcete podporovat.

Když v manifestu balíčku deklarujete aplikaci jako cíl sdílené složky, určíte, které typy souborů a datové formáty může aplikace přijímat. V listu Sdílet se zobrazí jenom aplikace, které podporují sdílené formáty.

Podporované typy můžete nakonfigurovat dvěma způsoby:

Pomocí editoru manifestu Visual Studio:

  1. Otevřete package.appxmanifest v Visual Studio.
  2. Vyberte kartu Deklarace .
  3. V seznamu Dostupných deklarací zvolte Sdílet cíl a pak vyberte Přidat.
  4. V části Podporované typy souborů přidejte přípony souborů, .jpgkteré vaše aplikace zpracovává (například , .png). Chcete-li přijmout všechny typy souborů, vyberte SupportsAnyFileType .
  5. V části Formáty dat přidejte názvy formátů, které aplikace zpracovává (například Text, Uri, Bitmap).

Přímo v souboru XML manifestu:

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

Zaregistrujte se jenom u formátů, které vaše aplikace dokáže zpracovat. Pokud deklarujete formát, ale nemůžete ho zpracovat, uživatelské prostředí bude trpět.

Čtení sdílených dat

Když je vaše aplikace aktivována jako cíl sdílení, obdržíte objekt ShareOperation prostřednictvím ShareTargetActivatedEventArgs. Jeho Data vlastnost je DataPackageView , která zveřejňuje sdílený obsah.

Použijte Contains ke zkontrolování, které formáty jsou k dispozici, a poté zavolejte příslušnou asynchronní metodu k načtení dat:

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

Hlášení stavu sdílení

Pokud zpracování sdílených dat nějakou dobu trvá , například nahrávání souborů na server, hlásí průběh do systému pomocí metod stavu ShareOperation . To umožňuje systému správně spravovat životní cyklus zdrojové aplikace.

Tyto metody volejte postupně v průběhu operace sdílení:

Metoda Kdy zavolat
ReportStarted Jakmile vaše aplikace začne zpracovávat sdílený obsah. Od tohoto okamžiku nepředpokládejte žádnou další interakci uživatele s uživatelským rozhraním pro sdílení.
ZprávaDataNačtena Jakmile vaše aplikace získá všechna data, která potřebuje, z DataPackageView. To umožňuje systému pozastavit nebo ukončit zdrojovou aplikaci.
ReportSubmittedBackgroundTask Pokud vaše aplikace pokračuje ve zpracování na pozadí po zavření uživatelského rozhraní pro sdílení.
ReportCompleted Když vaše aplikace úspěšně dokončí zpracování sdíleného obsahu.
Chyba reportu Pokud dojde k závažné chybě. Uživatel uvidí zprávu a operace sdílení skončí.
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

ReportError volejte pouze při chybách natolik závažných, že ukončí operaci sdílení. V případě obnovitelných chyb můžete pokračovat ve zpracování bez volání ReportError.

Note

Existují případy, kdy může cílová aplikace volat ReportDataRetrieved dříve ReportStarted– například pokud vaše aplikace načítá data jako součást zpracování aktivace, ale zavolá ReportStarted později, až uživatel explicitně vybere tlačítko Sdílet .

Když uživatel sdílí obsah ve vaší aplikaci, můžete vrátit QuickLink, aby bylo budoucí sdílení rychlejší. V panelu sdílení se QuickLink zobrazí jako zástupce – například jako zástupce kontaktu, který uživateli umožní rychle znovu s tímto kontaktem sdílet obsah, aniž by musel procházet uživatelským rozhraním vaší aplikace.

A QuickLink má název, ikonu a ID. ID je interní identifikátor zkratky ve vaší aplikaci, například ID kontaktu nebo název účtu. Když uživatel později vybere QuickLink, systém aktivuje vaši aplikaci a předá QuickLink ID zpět prostřednictvím ShareOperation.QuickLinkId.

Vraťte QuickLink jeho předáním metodě 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

A QuickLink ukládá pouze ID, nikoli přidružená data. Vaše aplikace zodpovídá za zachování jakýchkoli uživatelských dat (například kontaktních údajů) a jejich načítání při aktivaci QuickLink prostřednictvím ShareOperation.QuickLinkId.

Viz také