应用操作
本文介绍如何使用 .NET Multi-platform App UI (.NET MAUI) IAppActions 接口,使用该接口可创建和响应应用快捷方式。 应用快捷方式对用户很有帮助,因为你作为应用开发者可以使用它们为用户展示启动应用的额外方法。 例如,如果你正在开发电子邮件和日历应用,则可以提供两种不同的应用操作,一种是直接打开应用,查看当前日期的日历,另一种是打开电子邮件收件箱文件夹。
IAppActions
接口的默认实现通过 AppActions.Current 属性提供。 IAppActions
接口和 AppActions
类都包含在 Microsoft.Maui.ApplicationModel
命名空间中。
开始使用
要访问 AppActions
功能,需执行以下特定于平台的设置。
在 Platforms/Android/MainActivity.cs 文件中,为 MainActivity
类添加 OnResume
和 OnNewIntent
重写,并添加以下 IntentFilter
特性:
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
[IntentFilter(new[] { Platform.Intent.ActionAppAction },
Categories = new[] { global::Android.Content.Intent.CategoryDefault })]
public class MainActivity : MauiAppCompatActivity {
protected override void OnResume()
{
base.OnResume();
Platform.OnResume(this);
}
protected override void OnNewIntent(Android.Content.Intent intent)
{
base.OnNewIntent(intent);
Platform.OnNewIntent(intent);
}
}
创建操作
应用操作可随时创建,但通常在应用启动时创建。 要配置应用操作,请调用 MauiProgram.cs 文件中 MauiAppBuilder 对象的 ConfigureEssentials(MauiAppBuilder, Action<IEssentialsBuilder>) 方法。 要启用应用操作,必须在 IEssentialsBuilder 对象上调用两个方法:
-
此方法创建操作。 它需要
id
字符串来唯一标识操作,还需要title
字符串来向用户显示。 可以选择性提供 subtitle 和 icon。 -
当用户调用应用操作时,将调用传递给此方法的委托,并提供应用操作实例。 检查操作的
Id
属性,以确定用户启动的应用操作。
以下代码演示如何在应用启动时配置应用操作:
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
})
.ConfigureEssentials(essentials =>
{
essentials
.AddAppAction("app_info", "App Info", icon: "app_info_action_icon")
.AddAppAction("battery_info", "Battery Info")
.OnAppAction(App.HandleAppActions);
});
return builder.Build();
}
响应操作
配置应用操作后,用户调用的所有应用操作都将调用 OnAppAction
方法。 使用属性 Id
来区分它们。 以下代码演示如何处理应用操作:
public static void HandleAppActions(AppAction appAction)
{
App.Current.Dispatcher.Dispatch(async () =>
{
var page = appAction.Id switch
{
"battery_info" => new SensorsPage(),
"app_info" => new AppModelPage(),
_ => default(Page)
};
if (page != null)
{
// Assume an app with a single window.
await Application.Current.Windows[0].Page.Navigation.PopToRootAsync();
await Application.Current.Windows[0].Page.Navigation.PushAsync(page);
}
});
}
检查应用操作是否受支持
在应用启动时或使用应用期间创建应用操作时,请通过读取 AppActions.Current.IsSupported
属性检查应用操作是否受支持。
在启动引导程序之外创建应用操作
要创建应用操作,请调用 SetAsync 方法:
if (AppActions.Current.IsSupported)
{
await AppActions.Current.SetAsync(new[] { new AppAction("app_info", "App Info", icon: "app_info_action_icon"),
new AppAction("battery_info", "Battery Info") });
}
有关应用操作的详细信息
如果特定版本的操作系统不支持应用操作,则会引发 FeatureNotSupportedException。
使用 AppAction(String, String, String, String) 构造函数设置应用操作的以下方面:
- Id:用于响应操作点击的唯一标识符。
- Title:要显示的可见 title。
- Subtitle:如果受支持,将在 title 下显示 subtitle。
- Icon:必须与每个平台的相应资源目录中的图标匹配。
获取操作
通过调用 AppActions.Current.GetAsync
,可获取当前的应用操作列表。