Udostępnij za pośrednictwem


Udostępnij

Browse sample. Przeglądanie przykładu

W tym artykule opisano sposób używania interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI). IShare Ten interfejs udostępnia interfejs API do wysyłania danych, takich jak tekst lub linki internetowe, do funkcji udostępnionej przez urządzenia.

Domyślna implementacja interfejsu IShare jest dostępna za pośrednictwem Share.Default właściwości . Zarówno interfejs, jak IShare i Share klasa są zawarte w Microsoft.Maui.ApplicationModel.DataTransfer przestrzeni nazw.

Po wysłaniu żądania udostępniania na urządzeniu zostanie wyświetlone okno udostępniania z monitem użytkownika o wybranie aplikacji do udostępnienia:

Share from your app to a different app

Rozpocznij

Aby uzyskać dostęp do funkcji Udostępniania , wymagana jest następująca konfiguracja specyficzna dla platformy:

Nie jest wymagana żadna konfiguracja.

Funkcja udostępniania działa przez wywołanie RequestAsync metody z ładunkiem danych, który zawiera informacje do udostępniania innym aplikacjom. ShareTextRequest.Text i może być mieszany, a ShareTextRequest.Uri każda platforma będzie obsługiwać filtrowanie na podstawie zawartości.

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

Udostępnianie pliku

Możesz również udostępniać pliki innym aplikacjom na urządzeniu. Program .NET MAUI automatycznie wykrywa typ pliku (MIME) i żąda udziału. Jednak systemy operacyjne mogą ograniczać typy plików, które mogą być udostępniane. Aby udostępnić pojedynczy plik, użyj ShareFileRequest typu .

Poniższy przykład kodu zapisuje plik tekstowy na urządzeniu, a następnie żąda jego udostępnienia:

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

Udostępnianie wielu plików

Udostępnianie wielu plików różni się nieco od udostępniania jednego pliku. Aby udostępnić pojedynczy plik, użyj ShareMultipleFilesRequest typu .

Poniższy przykładowy kod zapisuje dwa pliki tekstowe na urządzeniu, a następnie żąda ich udostępnienia:

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

Lokalizacja prezentacji

Ważne

Ta sekcja dotyczy tylko systemu iPadOS.

Podczas żądania udostępniania lub otwierania modułu uruchamiania w systemie iPadOS można go przedstawić w popover. Określa, gdzie pojawi się wyskakujące okienko i wskaże strzałkę bezpośrednio do. Ta lokalizacja jest często kontrolką uruchamiającą akcję. Lokalizację można określić przy użyciu PresentationSourceBounds właściwości :

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

Wszystkie opisane tutaj elementy działają równie dobrze dla Share elementów i Launcher.

Oto metoda rozszerzenia, która pomaga obliczyć granice widoku:

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

Następnie można go użyć podczas wywoływania metody 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
    }
}

Element wywołujący można przekazać po wyzwoleniu elementu Command :

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

Aby zapoznać się z przykładem ViewHelpers klasy, zobacz przykład .NET MAUI hostowany w witrynie GitHub.

Różnice między platformami

W tej sekcji opisano różnice specyficzne dla platformy dotyczące interfejsu API udostępniania.