在MAUI跨平台应用开发过程中,打开另一个应用是较为常见的需求,比如引导用户跳转到系统设置页面、启动同开发者的其他应用、调用系统自带浏览器打开网页等。MAUI框架内置的Launcher API封装了各平台的应用启动逻辑,开发者只需要编写一套代码就能在Android、iOS、Windows等平台实现应用跳转功能,大幅降低了跨平台开发的适配成本。

Launcher API基础介绍
Launcher API位于Microsoft.Maui.ApplicationModel命名空间下,主要通过Launcher静态类提供方法,核心功能包括打开指定URI、打开应用内文件、检查应用是否可打开指定URI等。使用该API前需要先确保项目已经引用了MAUI的基础包,默认新建的MAUI项目已经包含相关依赖,无需额外安装。
常用核心方法
- CanOpenAsync:检查当前设备是否可以打开指定的URI,返回布尔值结果
- OpenAsync:尝试打开指定的URI,支持传递打开参数,返回打开操作的结果
- OpenAsync(LaunchOptions):通过配置
LaunchOptions对象传递更多打开参数,比如指定打开方式、传递额外数据等
基础使用:打开指定URI
打开另一个应用最基础的方式是调用Launcher.OpenAsync方法,传入目标应用的URI或者对应的Scheme。不同平台的URI格式略有差异,比如打开系统设置页面,各平台的URI如下:
| 平台 | 系统设置URI示例 |
|---|---|
| Android | android.settings.SETTINGS |
| iOS | app-settings: |
| Windows | ms-settings: |
以下是跨平台打开系统设置的代码示例:
using Microsoft.Maui.ApplicationModel;
public async Task OpenSystemSettings()
{
// 定义各平台的系统设置URI
string settingsUri = DeviceInfo.Platform switch
{
DevicePlatform.Android => "android.settings.SETTINGS",
DevicePlatform.iOS => "app-settings:",
DevicePlatform.WinUI => "ms-settings:",
_ => throw new PlatformNotSupportedException()
};
// 检查是否可以打开该URI
bool canOpen = await Launcher.CanOpenAsync(new Uri(settingsUri));
if (canOpen)
{
// 执行打开操作
await Launcher.OpenAsync(new Uri(settingsUri));
}
else
{
// 处理无法打开的情况
await Application.Current.MainPage.DisplayAlert("提示", "当前设备不支持打开系统设置", "确定");
}
}
打开第三方应用
如果要打开第三方应用,需要知道目标应用的Scheme或者对应的URI格式。比如打开微信,不同平台的Scheme如下:
- Android:weixin://
- iOS:weixin://
以下是打开微信的代码示例:
public async Task OpenWechat()
{
string wechatScheme = "weixin://";
var uri = new Uri(wechatScheme);
// 先检查是否安装微信
if (await Launcher.CanOpenAsync(uri))
{
await Launcher.OpenAsync(uri);
}
else
{
await Application.Current.MainPage.DisplayAlert("提示", "未检测到微信应用", "确定");
}
}
传递参数打开应用
部分应用支持通过URI传递参数实现特定功能,比如打开浏览器并指定要访问的网页,或者打开地图应用并传递坐标参数。此时只需要在URI后面拼接对应的参数即可。
以下是打开系统浏览器访问指定网页的示例:
public async Task OpenBrowser(string url)
{
// 确保URL格式正确
if (!url.StartsWith("http://") && !url.StartsWith("https://"))
{
url = "https://" + url;
}
var uri = new Uri(url);
if (await Launcher.CanOpenAsync(uri))
{
await Launcher.OpenAsync(uri);
}
}
使用LaunchOptions传递更多配置
如果需要在打开应用时传递更多配置,比如指定打开方式、传递额外数据,可以使用LaunchOptions对象。以下是使用LaunchOptions的示例:
public async Task OpenWithOptions()
{
var options = new LaunchOptions
{
// 是否在新窗口打开(部分平台支持)
PreferredPresentationMode = LaunchPresentationMode.NewWindow,
// 传递额外数据(部分平台支持)
ExtraData = new Dictionary<string, object>
{
{ "source", "my_app" }
}
};
await Launcher.OpenAsync(new Uri("weixin://"), options);
}
平台适配注意事项
虽然Launcher API做了跨平台封装,但不同平台仍有部分差异需要注意:
- Android平台需要在AndroidManifest.xml中声明对应的权限,比如打开网络相关应用需要网络权限,部分系统设置页面需要特定权限
- iOS平台需要在Info.plist中配置LSApplicationQueriesSchemes,声明要查询的Scheme列表,否则
CanOpenAsync可能返回错误结果 - Windows平台部分URI需要应用具备对应的能力声明,比如访问网络需要声明网络能力
以下是Android平台声明权限的示例,在AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
以下是iOS平台配置Scheme查询的示例,在Info.plist中添加:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>http</string>
<string>https</string>
</array>
常见问题处理
在使用Launcher API时可能会遇到打开失败的情况,常见原因和解决方法如下:
- 目标应用未安装:先通过
CanOpenAsync检查,未安装时引导用户去应用商店下载 - URI格式错误:确认目标应用的URI格式是否正确,不同平台可能有差异
- 平台权限不足:按照对应平台的适配要求添加权限和配置
注意:Launcher API的打开结果仅表示系统是否成功调用了打开操作,不代表目标应用一定成功启动,部分情况下系统可能弹出选择框让用户选择打开方式,此时操作结果可能返回成功但实际未打开目标应用。
MAUILauncher_API应用跳转跨平台开发修改时间:2026-07-19 14:48:41