Xamarin.Essentials: Spouštěč
Třída spouštěče umožňuje aplikaci otevřít identifikátor URI systémem. To se často používá při přímém propojení do vlastních schémat identifikátorů URI jiné aplikace. Pokud chcete otevřít prohlížeč na webu, měli byste se podívat na rozhraní API prohlížeče .
Začínáme
Pokud chcete začít používat toto rozhraní API, přečtěte si příručku Začínáme pro, abyste měli jistotu, že je knihovna správně nainstalovaná a nastavená ve vašich projektech.
Pomocí spouštěče
Do třídy přidejte odkaz Xamarin.Essentials :
using Xamarin.Essentials;
Chcete-li použít funkci spouštěče, zavolejte OpenAsync metodu a předejte string nebo Uri pro otevření. Volitelně CanOpenAsync lze metodu použít ke kontrole, zda lze schématu identifikátoru URI zpracovat aplikací na zařízení.
public class LauncherTest
{
public async Task OpenRideShareAsync()
{
var supportsUri = await Launcher.CanOpenAsync("lyft://");
if (supportsUri)
await Launcher.OpenAsync("lyft://ridetype?id=lyft_line");
}
}
To lze zkombinovat do jednoho volání s TryOpenAsync , které kontroluje, zda lze parametr otevřít, a pokud jej otevřete.
public class LauncherTest
{
public async Task<bool> OpenRideShareAsync()
{
return await Launcher.TryOpenAsync("lyft://ridetype?id=lyft_line");
}
}
Nastavení dalších platforem
Soubory
Tato funkce umožňuje aplikaci požádat o otevření a zobrazení souboru další aplikace. Xamarin.Essentials automaticky rozpozná typ souboru (MIME) a vyžádá si soubor, který se má otevřít.
Tady je ukázka zápisu textu na disk a vyžádání jeho otevření:
var fn = "File.txt";
var file = Path.Combine(FileSystem.CacheDirectory, fn);
File.WriteAllText(file, "Hello World");
await Launcher.OpenAsync(new OpenFileRequest
{
File = new ReadOnlyFile(file)
});
Umístění prezentace při otevírání souborů
Při žádosti o sdílení nebo otevření spouštěče na iPadOS máte možnost prezentovat ovládací prvek pop. To určuje, kde se zobrazí automaticky otevírané okno a nasměruje šipku přímo na. Toto umístění je často ovládací prvek, který spustil akci. 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šechno popsané tady funguje stejně jako pro Share a Launcher .
Pokud používáte Xamarin.Forms , můžete předat View a vypočítat 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 se pak dá 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
}
}
Můžete předat volání elementu při Command aktivaci:
<Button Text="Share"
Command="{Binding ShareWithFriendsCommand}"
CommandParameter="{Binding Source={RelativeSource Self}}"/>
Rozdíly platformy
rozhraní API
- Xamarin. Essentials /Launcher "data-LINKTYPE =" external ">zdrojovém kódu spouštěče
- Dokumentace k rozhraní API spouštěče