Sdílet prostřednictvím


Sdílet

Browse sample. Procházení ukázky

Tento článek popisuje, jak můžete použít rozhraní .NET Multi-Platform App UI (.NET MAUI). IShare Toto rozhraní poskytuje rozhraní API pro odesílání dat, například textových nebo webových odkazů, do funkce sdílení zařízení.

Výchozí implementace IShare rozhraní je k dispozici prostřednictvím Share.Default vlastnosti. Rozhraní IShare i Share třída jsou obsaženy v Microsoft.Maui.ApplicationModel.DataTransfer oboru názvů.

Když se vytvoří žádost o sdílenou složku, zobrazí se v zařízení okno pro sdílení s výzvou, aby uživatel zvolil aplikaci, se kterou se má sdílet:

Share from your app to a different app

Začínáme

Pro přístup k funkcím sdílení se vyžaduje následující nastavení specifické pro platformu:

Není vyžadováno žádné nastavení.

Funkce sdílení funguje voláním RequestAsync metody s datovou částí, která obsahuje informace ke sdílení do jiných aplikací. ShareTextRequest.Text a ShareTextRequest.Uri lze je kombinovat a každá platforma bude zpracovávat filtrování na základě obsahu.

public async Task ShareText(string text)
{
    await Share.Default.RequestAsync(new ShareTextRequest
    {
        Text = text,
        Title = "Share Text"
    });
}

public async Task ShareUri(string uri, IShare share)
{
    await share.RequestAsync(new ShareTextRequest
    {
        Uri = uri,
        Title = "Share Web Link"
    });
}

Sdílení souboru

Soubory můžete také sdílet s jinými aplikacemi na zařízení. .NET MAUI automaticky rozpozná typ souboru (MIME) a požádá o sdílenou složku. Operační systémy však mohou omezit, které typy souborů lze sdílet. Pokud chcete sdílet jeden soubor, použijte tento ShareFileRequest typ.

Následující příklad kódu zapíše do zařízení textový soubor a potom požádá o jeho sdílení:

public async Task ShareFile()
{
    string fn = "Attachment.txt";
    string file = Path.Combine(FileSystem.CacheDirectory, fn);

    File.WriteAllText(file, "Hello World");

    await Share.Default.RequestAsync(new ShareFileRequest
    {
        Title = "Share text file",
        File = new ShareFile(file)
    });
}

Sdílení více souborů

Sdílení více souborů se mírně liší od sdílení jednoho souboru. Pokud chcete sdílet jeden soubor, použijte tento ShareMultipleFilesRequest typ.

Následující příklad kódu zapíše do zařízení dva textové soubory a potom je požádá o jejich sdílení:

public async Task ShareMultipleFiles()
{
    string file1 = Path.Combine(FileSystem.CacheDirectory, "Attachment1.txt");
    string file2 = Path.Combine(FileSystem.CacheDirectory, "Attachment2.txt");

    File.WriteAllText(file1, "Content 1");
    File.WriteAllText(file2, "Content 2");

    await Share.Default.RequestAsync(new ShareMultipleFilesRequest
    {
        Title = "Share multiple files",
        Files = new List<ShareFile> { new ShareFile(file1), new ShareFile(file2) }
    });
}

Umístění prezentace

Důležité

Tato část platí jenom pro iPadOS.

Při vyžádání sdílené složky nebo otevření spouštěče v iPaduOS ji můžete prezentovat v automaticky otevírané nabídce. Určuje, kde se automaticky otevírané okno zobrazí, a nasměruje šipku přímo na. Toto umístění je často ovládací prvek, který akci spustil. Umístění můžete zadat pomocí PresentationSourceBounds vlastnosti:

await Share.RequestAsync(new ShareFileRequest
    {
        Title = Title,
        File = new ShareFile(file),
        PresentationSourceBounds = DeviceInfo.Platform == DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
                                ? new Rect(0, 20, 0, 0)
                                : Rect.Zero
    });
await Launcher.OpenAsync(new OpenFileRequest
    {
        File = new ReadOnlyFile(file),
        PresentationSourceBounds = DeviceInfo.Platform == DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
                                ? new Rect(0, 20, 0, 0)
                                : Rect.Zero
    });

Vše popsané zde funguje stejně pro Share a Launcher.

Tady je rozšiřující metoda, která pomáhá vypočítat hranice zobrazení:

public static class ViewHelpers
{
    public static Rect GetAbsoluteBounds(this Microsoft.Maui.Controls.View element)
    {
        Element looper = element;

        var absoluteX = element.X + element.Margin.Top;
        var absoluteY = element.Y + element.Margin.Left;

        // Add logic to handle titles, headers, or other non-view bars

        while (looper.Parent != null)
        {
            looper = looper.Parent;
            if (looper is Microsoft.Maui.Controls.View v)
            {
                absoluteX += v.X + v.Margin.Top;
                absoluteY += v.Y + v.Margin.Left;
            }
        }

        return new Rect(absoluteX, absoluteY, element.Width, element.Height);
    }
}

To se pak dá použít při volání RequestAsync:

public Command<Microsoft.Maui.Controls.View> ShareCommand { get; } = new Command<Microsoft.Maui.Controls.View>(Share);

async void Share(Microsoft.Maui.Controls.View element)
{
    try
    {
        await Share.Default.RequestAsync(new ShareTextRequest
        {
            PresentationSourceBounds = element.GetAbsoluteBounds(),
            Title = "Title",
            Text = "Text"
        });
    }
    catch (Exception)
    {
        // Handle exception that share failed
    }
}

Volající prvek můžete předat při aktivaci Command :

<Button Text="Share"
        Command="{Binding ShareWithFriendsCommand}"
        CommandParameter="{Binding Source={RelativeSource Self}}"/>

Příklad ViewHelpers třídy najdete v ukázce .NET MAUI hostované na GitHubu.

Rozdíly mezi platformami

Tato část popisuje rozdíly specifické pro platformu s rozhraním API pro sdílení.