Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Klasa Share umożliwia aplikacji udostępnianie danych, takich jak tekst i linki internetowe do innych aplikacji na urządzeniu.
Rozpocznij
Aby rozpocząć korzystanie z tego interfejsu API, przeczytaj przewodnik wprowadzający , Xamarin.Essentials aby upewnić się, że biblioteka jest prawidłowo zainstalowana i skonfigurowana w projektach.
Nie jest wymagana żadna dodatkowa konfiguracja.
Korzystanie z udziału
Dodaj odwołanie do Xamarin.Essentials klasy:
using Xamarin.Essentials;
Funkcja Udostępniania działa przez wywołanie RequestAsync metody z ładunkiem żądania danych, który zawiera informacje do udostępniania innym aplikacjom. Tekst i identyfikator URI można mieszać, a każda platforma będzie obsługiwać filtrowanie na podstawie zawartości.
public class ShareTest
{
public async Task ShareText(string text)
{
await Share.RequestAsync(new ShareTextRequest
{
Text = text,
Title = "Share Text"
});
}
public async Task ShareUri(string uri)
{
await Share.RequestAsync(new ShareTextRequest
{
Uri = uri,
Title = "Share Web Link"
});
}
}
Interfejs użytkownika do udostępniania aplikacji zewnętrznej, która jest wyświetlana po wysłaniu żądania:

Plik
Te funkcje umożliwiają aplikacji udostępnianie plików innym aplikacjom na urządzeniu. Xamarin.Essentials Program automatycznie wykryje typ pliku (MIME) i zażąda udziału. Każda platforma może obsługiwać tylko określone rozszerzenia plików.
Oto przykład pisania tekstu na dysku i udostępniania go innym aplikacjom:
var fn = "Attachment.txt";
var file = Path.Combine(FileSystem.CacheDirectory, fn);
File.WriteAllText(file, "Hello World");
await Share.RequestAsync(new ShareFileRequest
{
Title = Title,
File = new ShareFile(file)
});
Wiele plików
Użycie udziału wielu plików różni się od pojedynczego pliku tylko w przypadku możliwości wysyłania kilku plików jednocześnie:
var file1 = Path.Combine(FileSystem.CacheDirectory, "Attachment1.txt");
File.WriteAllText(file, "Content 1");
var file2 = Path.Combine(FileSystem.CacheDirectory, "Attachment2.txt");
File.WriteAllText(file, "Content 2");
await Share.RequestAsync(new ShareMultipleFilesRequest
{
Title = ShareFilesTitle,
Files = new List<ShareFile> { new ShareFile(file1), new ShareFile(file2) }
});
Lokalizacja prezentacji
Podczas żądania udostępniania lub otwierania modułu uruchamiania w systemie iPadOS masz możliwość prezentowania w oknie podręcznym kontroli. Określa, gdzie pojawi się okienko podręczne i wskaż 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 System.Drawing.Rectangle(0, 20, 0, 0)
: System.Drawing.Rectangle.Empty
});
await Launcher.OpenAsync(new OpenFileRequest
{
File = new ReadOnlyFile(file),
PresentationSourceBounds = DeviceInfo.Platform== DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
? new System.Drawing.Rectangle(0, 20, 0, 0)
: System.Drawing.Rectangle.Empty
});
Wszystkie opisane tutaj elementy działają równie dobrze dla Share elementów i Launcher.
Jeśli używasz Xamarin.Forms , możesz przekazać View element i obliczyć granice:
public static class ViewHelpers
{
public static Rectangle GetAbsoluteBounds(this Xamarin.Forms.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 Xamarin.Forms.View v)
{
absoluteX += v.X + v.Margin.Top;
absoluteY += v.Y + v.Margin.Left;
}
}
return new Rectangle(absoluteX, absoluteY, element.Width, element.Height);
}
public static System.Drawing.Rectangle ToSystemRectangle(this Rectangle rect) =>
new System.Drawing.Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
}
Następnie można go użyć podczas wywoływania metody RequestAsync:
public Command<Xamarin.Forms.View> ShareCommand { get; } = new Command<Xamarin.Forms.View>(Share);
async void Share(Xamarin.Forms.View element)
{
try
{
Analytics.TrackEvent("ShareWithFriends");
var bounds = element.GetAbsoluteBounds();
await Share.RequestAsync(new ShareTextRequest
{
PresentationSourceBounds = bounds.ToSystemRectangle(),
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}}"/>
Różnice między platformami
Subjectwłaściwość jest używana dla żądanego tematu komunikatu.
interfejs API
Powiązany film wideo
Więcej filmów na platformie Xamarin można znaleźć w witrynach Channel 9 i YouTube.