Launcher
이 문서에서는 .NET 다중 플랫폼 앱 UI(.NET MAUI) ILauncher 인터페이스를 사용하는 방법을 설명합니다. 이 인터페이스를 사용하면 애플리케이션이 시스템에서 URI를 열 수 있습니다. 애플리케이션을 여는 이러한 방법은 다른 애플리케이션의 사용자 지정 URI 스키마에 딥 링크할 때 자주 사용됩니다.
인터페이스의 ILauncher
기본 구현은 속성을 통해 Launcher.Default 사용할 수 있습니다. ILauncher
인터페이스와 Launcher
클래스는 모두 네임스페이스에 Microsoft.Maui.ApplicationModel
포함됩니다.
Important
브라우저를 웹 사이트로 열려면 브라우저 API를 대신 사용합니다.
시작하기
시작 관리자 기능에 액세스하려면 다음 플랫폼별 설정이 필요합니다.
딥 링크를 사용하여 다른 Android 앱을 열려면 앱에서 의도 필터를 정의해야 합니다. 이 작업은 Platforms/Android/AndroidManifest.xml 파일에 다음 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>
요소는 <data>
앱에 미리 등록된 URI 스키마입니다. 의도 필터에 정의되지 않은 체계는 사용할 수 없습니다.
다른 앱에서 앱을 검색할 수 있도록 하려면 특성이 있는 <data>
요소를 android:scheme
선언합니다.
<data android:scheme="appName"/>
다른 앱 열기
시작 관리자 기능을 사용하려면 메서드를 ILauncher.OpenAsync 호출하고 열려는 앱을 전달 String 하거나 Uri 나타냅니다. 필요에 따라 디바이스의 ILauncher.CanOpenAsync(Uri) 앱에서 URI 체계를 처리할 수 있는 경우 이 메서드를 사용하여 검사 수 있습니다. 다음 코드에서는 URI 구성표가 지원되는지 여부를 검사 다음 URI를 여는 방법을 보여 줍니다.
bool supportsUri = await Launcher.Default.CanOpenAsync("lyft://");
if (supportsUri)
await Launcher.Default.OpenAsync("lyft://ridetype?id=lyft_line");
이전 코드 예제는 URI 구성표를 열기 전에 검사 사용하여 간소화TryOpenAsync(Uri)할 수 있습니다.
bool launcherOpened = await Launcher.Default.TryOpenAsync("lyft://ridetype?id=lyft_line");
if (launcherOpened)
{
// Do something fun
}
파일을 통해 다른 앱 열기
시작 관리자를 사용하여 선택한 파일이 있는 앱을 열 수도 있습니다. .NET MAUI는 MIME(파일 형식)를 자동으로 검색하고 해당 파일 형식에 대한 기본 앱을 엽니다. 둘 이상의 앱이 파일 형식으로 등록된 경우 앱 선택 팝오버가 사용자에게 표시됩니다.
다음 코드 예제에서는 파일에 텍스트를 쓰고 시작 관리자를 사용하여 텍스트 파일을 엽니다.
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)));
시작 관리자 위치 설정
Important
이 섹션은 iPadOS에만 적용됩니다.
iPadOS에서 공유를 요청하거나 시작 관리자를 열 때 팝오버에 표시할 수 있습니다. 팝오버가 표시되는 위치를 지정하고 화살표를 직접 가리킵니다. 이 위치는 보통 작업을 시작한 컨트롤입니다. 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
});
여기에 설명된 모든 내용은 Share 및 Launcher에 대해 동일하게 작동합니다.
보기의 범위를 계산하는 데 도움이 되는 확장 메서드는 다음과 같습니다.
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);
}
}
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
}
}
Command
트리거 시 호출하는 요소를 전달할 수 있습니다.
<Button Text="Share"
Command="{Binding ShareWithFriendsCommand}"
CommandParameter="{Binding Source={RelativeSource Self}}"/>
클래스의 예제는 ViewHelpers
GitHub에서 호스트되는 .NET MAUI 샘플을 참조하세요.
플랫폼 간 차이점
이 섹션에서는 시작 관리자 API와의 플랫폼별 차이점에 대해 설명합니다.
반환된 TaskCanOpenAsync 작업은 즉시 완료됩니다.
.NET MAUI