Xamarin.Essentials: Sdílet
Třída Share umožňuje aplikaci sdílet data, jako jsou textové a webové odkazy, s jinými aplikacemi na zařízení.
Začínáme
Pokud chcete začít používat toto rozhraní API, přečtěte si příručku Začínáme pro a ujistěte se, že je knihovna správně nainstalovaná a nastavená ve vašich projektech.
Použití sdílené složky
Do třídy Xamarin.Essentials přidejte odkaz na :
using Xamarin.Essentials;
Funkce Sdílení funguje tak, že volá metodu s datovou část požadavku, která obsahuje informace pro RequestAsync sdílení s jinými aplikacemi. Text a identifikátor URI je možné směšovat a každá platforma bude zpracovávat filtrování na základě obsahu.
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"
});
}
}
Uživatelské rozhraní pro sdílení s externí aplikací, které se zobrazí po vyžádání:

Soubor
Tyto funkce umožňují aplikaci sdílet soubory s jinými aplikacemi na zařízení. Xamarin.Essentials automaticky rozpozná typ souboru (MIME) a vyžádá si sdílení. Každá platforma může podporovat jenom konkrétní přípony souborů.
Tady je ukázka zápisu textu na disk a jeho sdílení s jinými aplikacemi:
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)
});
Více souborů
Použití sdílení více souborů se liší od jednoho souboru pouze v možnosti odeslat několik souborů najednou:
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) }
});
Prezentační umístění
Při žádosti o sdílení nebo otevření spouštěče na iPadOS máte možnost zobrazení automaticky otevíraných ovládacích panelů. Určuje, kde se zobrazí překryvné okno a nasouvá š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 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
});
Vše, co je zde popsáno, funguje stejně pro Share a Launcher .
Pokud používáte , můžete předat a vypočítat Xamarin.FormsView hranice:
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);
}
To pak můžete použít při volání 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
}
}
Volající prvek můžete předat, když se Command aktivuje :
<Button Text="Share"
Command="{Binding ShareWithFriendsCommand}"
CommandParameter="{Binding Source={RelativeSource Self}}"/>
Rozdíly mezi platformami
rozhraní API
- Xamarin.Essentials /Share" data-linktype="external">Sdílení zdrojového kódu
- Dokumentace ke službě Share API
Související video
Další videa o Xamarinu najdete na Channel 9 a YouTube.