Inicializador
Este artigo descreve como você pode usar a interface .NET Multi-platform App UI (.NET MAUI). ILauncher Essa interface permite que um aplicativo abra um URI pelo sistema. Essa maneira de abrir um aplicativo geralmente é usada ao fazer links profundos em esquemas de URI personalizados de outro aplicativo.
A implementação padrão da interface está disponível por meio da ILauncher
Launcher.Default propriedade. A interface e Launcher
a ILauncher
classe estão contidas no Microsoft.Maui.ApplicationModel
namespace.
Importante
Para abrir o navegador para um site, use a API do navegador .
Introdução
Para acessar a funcionalidade do iniciador, é necessária a seguinte configuração específica da plataforma.
Se você quiser usar links diretos para abrir outros aplicativos Android, defina um filtro de intenção em seu aplicativo. Isso pode ser obtido adicionando o seguinte XML ao arquivo Platforms/Android/AndroidManifest.xml
<activity android:name="appName" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="lyft"/>
<data android:scheme="fb"/>
</intent-filter>
</activity>
Os <data>
elementos são os esquemas de URI pré-registrados em seu aplicativo. Não é possível usar esquemas que não estejam definidos no filtro de intenção.
Para tornar seu aplicativo navegável a partir de outros aplicativos, declare um <data>
elemento com o android:scheme
atributo:
<data android:scheme="appName"/>
Abrir outro aplicativo
Para usar a funcionalidade Iniciador, chame o método e passe um String ou Uri representando o ILauncher.OpenAsync aplicativo para abrir. Opcionalmente, o método pode ser usado para verificar se o ILauncher.CanOpenAsync(Uri) esquema de URI pode ser manipulado por um aplicativo no dispositivo. O código a seguir demonstra como verificar se um esquema de URI é suportado ou não e, em seguida, abre o URI:
bool supportsUri = await Launcher.Default.CanOpenAsync("lyft://");
if (supportsUri)
await Launcher.Default.OpenAsync("lyft://ridetype?id=lyft_line");
O exemplo de código anterior pode ser simplificado usando o , que verifica se o TryOpenAsync(Uri)esquema de URI pode ser aberto, antes de abri-lo:
bool launcherOpened = await Launcher.Default.TryOpenAsync("lyft://ridetype?id=lyft_line");
if (launcherOpened)
{
// Do something fun
}
Abrir outro aplicativo por meio de um arquivo
O iniciador também pode ser usado para abrir um aplicativo com um arquivo selecionado. O .NET MAUI detecta automaticamente o tipo de arquivo (MIME) e abre o aplicativo padrão para esse tipo de arquivo. Se mais de um aplicativo estiver registrado com o tipo de arquivo, um popover de seleção de aplicativo será mostrado ao usuário.
O exemplo de código a seguir grava texto em um arquivo e abre o arquivo de texto com o iniciador:
string popoverTitle = "Read text file";
string name = "File.txt";
string file = System.IO.Path.Combine(FileSystem.CacheDirectory, name);
System.IO.File.WriteAllText(file, "Hello World");
await Launcher.Default.OpenAsync(new OpenFileRequest(popoverTitle, new ReadOnlyFile(file)));
Definir o local do iniciador
Importante
Esta seção só se aplica ao iPadOS.
Ao solicitar um compartilhamento ou abrir o iniciador no iPadOS, você pode apresentá-lo em um popover. Isso especifica onde o popover aparecerá e aponte uma seta diretamente. Esse local geralmente é o controle que iniciou a ação. Você pode especificar a localização usando a propriedade PresentationSourceBounds:
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
});
Tudo descrito aqui funciona igualmente para Share e Launcher.
Aqui está um método de extensão que ajuda a calcular os limites de uma exibição:
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);
}
}
Isso pode ser usado ao chamar 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
}
}
Você pode passar o elemento de chamada quando o Command
é acionado:
<Button Text="Share"
Command="{Binding ShareWithFriendsCommand}"
CommandParameter="{Binding Source={RelativeSource Self}}"/>
Para obter um exemplo da ViewHelpers
classe, consulte o .NET MAUI Sample hospedado no GitHub.
Diferenças de plataforma
Esta seção descreve as diferenças específicas da plataforma com a API do iniciador.
O Task retorno de CanOpenAsync é concluído imediatamente.