能否为UWP的Toast通知操作添加OnClick事件且点击不唤起应用?
实现Toast点击后台捕获不唤起应用的方案
适用场景
针对Windows平台UWP/WinUI/Windows App SDK开发的Toast通知交互场景
核心操作步骤
- 第一步:设置Toast通知的激活类型为后台激活
构造Toast的XML内容时,在根节点指定activationType="background",避免触发前台应用激活逻辑,示例配置:
如果是给Toast内的按钮单独配置,同样给对应<toast activationType="background" launch="your_custom_param"> <visual> <binding template="ToastGeneric"> <text>通知标题</text> <text>通知内容</text> </binding> </visual> </toast><action>节点添加activationType="background"属性即可。 - 第二步:注册对应触发器的后台任务
在应用初始化阶段(首次启动时触发一次即可)注册ToastNotificationActionTrigger类型的后台任务,示例代码(C#):var builder = new BackgroundTaskBuilder(); builder.Name = "ToastClickBackgroundTask"; builder.SetTrigger(new ToastNotificationActionTrigger()); // 打包应用需指定后台任务入口点,unpackaged应用可直接注册回调 builder.TaskEntryPoint = "YourAppNamespace.ToastClickBackgroundTask"; builder.Register(); - 第三步:实现后台任务的点击处理逻辑
重写后台任务的Run方法,在内部处理点击参数、执行业务逻辑,全程不会唤起前台应用窗口:public sealed class ToastClickBackgroundTask : IBackgroundTask { public void Run(IBackgroundTaskInstance taskInstance) { // 获取Toast点击传递的参数 var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail; string customParam = details.Argument; // 在这里写你需要的后台处理逻辑 // 不要调用任何激活前台窗口的API } }
注意事项
- 需在应用清单文件中声明后台任务权限,类型勾选
系统事件,入口点和注册时的TaskEntryPoint保持一致 - 若使用第三方Toast封装库,找到对应设置激活类型的API,将默认的前台激活改为后台激活即可
- 处理逻辑耗时较长的话需要申请后台任务延期,避免被系统提前回收
内容的提问来源于stack exchange,提问作者Eduardo
相关产品推荐
相关产品推荐

