UWP 中的 LaunchUriAsync,使用默认浏览器或其他应用打开链接
古老的 Win32 应用启动其他程序太过方便,以至于一部分开发者都已经不记得 Windows 能通过关联协议的方式通过统一资源定位符(URI)来启动应用程序了。
转到 UWP 后,使用 URI 启动应用似乎成为了最推荐的方式。于是一句 LaunchUriAsync 就能解决大多数问题。
常用的 Windows 10 内置协议
| URI 协议 | 启动 |
|---|---|
| http: | 默认网页浏览器 |
| mailto: | 默认电子邮件 |
| ms-settings: | 设置 |
| ms-store: | 应用商店 |
于是,只要 URI 带这些协议头,就能够用表格中的那些应用打开相应的功能了。
如果想知道 ms-settings 里有哪些可用,请参见:启动 Windows 设置应用 - UWP app developer;想知道 ms-store 可以如何帮助我们前往商店的具体页面,请参见:启动 Windows 应用商店应用 - UWP app developer。
LaunchUriAsync
要想简单地在代码中使用,一句足以:
await Launcher.LaunchUriAsync(new Uri(@"http://blog.csdn.net/WPwalter/article/details/78081272"));
如果你希望在调用成功或失败后执行一些操作,则可以多写一些:
var myblog = new Uri(@"http://blog.csdn.net/WPwalter/");
var success = await Launcher.LaunchUriAsync(myblog);
if (success)
{
// 如果你感兴趣,可以在成功启动后在这里执行一些操作。
}
else
{
// 如果你感兴趣,可以在这里处理启动失败的一些情况。
}
}
然而,UWP 还提供了更多的选项:LauncherOptions。
LauncherOptions
在写以上代码时不难发现,LaunchUriAsync 提供了重载传入 LauncherOptions 参数,这个参数似乎是指定启动时的一些选项。查看注释后,可以发现这些选项:
/// <summary>获取或设置指示启动与文件或 URI 关联的应用程序时系统是否应显示文件或 URI 可能会不安全的警告的值。</summary>
/// <returns>如果应显示警告,则为 true;否则为 false。</returns>
public bool TreatAsUntrusted { get; set; }
/// <summary>获取或设置一个值,该值指示每当调用关联启动 API 时是否要显示**打开方式**对话框。</summary>
/// <returns>如果应始终显示**打开方式**对话框,则为 true;否则为 false。</returns>
public bool DisplayApplicationPicker { get; set; }
/// <summary>在启动默认应用程序时获取用户界面 (UI) 选项。</summary>
/// <returns>UI 选项。</returns>
public LauncherUIOptions UI { get; }
/// <summary>获取或设置表示没有处理文件类型或 URI 的应用程序时,用户应安装的应用程序在存储区中的包系列名称的值。</summary>
/// <returns>应用的程序包系列名称。</returns>
public string PreferredApplicationPackageFamilyName { get; set; }
/// <summary>获取或设置一个值,该值表示没有处理文件类型或 URI 的应用程序时,用户应安装的应用程序在存储区中的显示名称。</summary>
/// <returns>应用程序的显示名称。</returns>
public string PreferredApplicationDisplayName { get; set; }
/// <summary>获取或设置表示没有处理文件类型或 URI 的应用程序时,用户应转到的浏览器中的 URI 的值。</summary>
/// <returns>用户应转到的浏览器中的 URI。</returns>
public global::System.Uri FallbackUri { get; set; }
/// <summary>获取或设置与表示网络上文件的 URI 相关的内容类型。</summary>
/// <returns>URL 的内容类型。</returns>
public string ContentType { get; set; }
/// <summary>启动目标应用程序,并通过与目标应用程序平分空间或占用比目标应用程序更多或更少的空间,让当前运行的源应用程序保留在屏幕上。</summary>
/// <returns>Windows.UI.ViewManagement.ViewSizePreference 类型的值,指定应用程序所需的视图大小。</returns>
public ViewSizePreference DesiredRemainingView { get; set; }
/// <summary>启动文件或 URI 时应使用的目标包的包系列名称。 此属性是可选的。</summary>
/// <returns>启动文件或 URI 时应使用的目标包的包系列名称。 此属性是可选的。</returns>
public string TargetApplicationPackageFamilyName { get; set; }
/// <summary>让应用能访问与用于激活应用的文件相关的文件。</summary>
/// <returns>包含相关文件列表的查询。</returns>
public StorageFileQueryResult NeighboringFilesQuery { get; set; }
/// <summary>指示是否忽略可以处理 http(s) 方案(如浏览器)的处理程序。 相反,启动将回退到默认浏览器。</summary>
/// <returns>**true** 指示可以处理 http(s) 方案的应用程序将被忽略,而是在默认浏览器中打开该 URI;否则为 **false**。</returns>
public bool IgnoreAppUriHandlers { get; set; }
/// <summary>获取或设置是否将启动器的选取器限制为当前应用程序及其相关联的 URI 处理程序。</summary>
/// <returns>如果启动器应将选取器限制为当前应用程序及其相关联的 URI 处理程序,则为 true;否则为 false。</returns>
public bool LimitPickerToCurrentAppAndAppUriHandlers { get; set; }
比如其中 TreatAsUntrusted 表示标记此次打开是不受信任的。
如果打开程序自己内置的链接,通常置为 false,以便能直接打开。但有时程序需要处理用户输入的数据,这时就不一定真的是期望打开了。于是标记为不安全后,Windows 10 会为我们弹出一个提示款,告诉我们是否真的要切换应用。
截图中的 MarkdownMail 是我的一个开源项目,可以前往 markdown-mail @ github 多多支持。
我们还可以指定推荐用哪个应用打开(设置 PreferredApplicationPackageFamilyName),指定期望显示的窗口大小(设置 DesiredRemainingView,不过不是具体的大小,而是几种选项),指定只打开自己当前这款应用(设置 LimitPickerToCurrentAppAndAppUriHandlers)。具体查看注释是能够了解的。
参考资料
- 启动 URI 的默认应用 - UWP app developer
- 启动 Windows 设置应用 - UWP app developer
- 启动 Windows 应用商店应用 - UWP app developer
UWP 中的 LaunchUriAsync,使用默认浏览器或其他应用打开链接的更多相关文章
- UWP中实现自定义标题栏
UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...
- UWP中新加的数据绑定方式x:Bind分析总结
UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...
- 淘宝UWP中的100个为什么
从淘宝UWP第一版发布到现在,已经有十个月了,期间收到了用户各种各样的反馈,感谢这些用户的反馈,指导我们不断的修正.完善应用.但是也有一部分需求或建议,由于资源或技术的限制,目前确实无法做到,只能对广 ...
- 揭秘Windows10 UWP中的httpclient接口[2]
阅读目录: 概述 如何选择 System.Net.Http Windows.Web.Http HTTP的常用功能 修改http头部 设置超时 使用身份验证凭据 使用客户端证书 cookie处理 概述 ...
- [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作
这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...
- UWP中重用C/C++代码时踩过的一些坑
标题中提到的UWP,主要是指用C#来写UWP的主工程,开发过程中可能需要调用C/C++实现的库. 为什么需要调用C/C++的库呢,举个例子,开源库OpenSSL实现了许多加密算法,稳定快速,我们想在应 ...
- 飞流直下的精彩 -- 淘宝UWP中瀑布流列表的实现
在淘宝UWP中,搜索结果列表是用户了解宝贝的重要一环,其中的图片效果对吸引用户点击搜索结果,查看宝贝详情有比较大的影响.为此手机淘宝特意在搜索结果列表上采用了2种表现方式:一种就是普通的列表模式,而另 ...
- QQ中打开链接不是默认浏览器
电脑上装了搜狗和Chrome,Chrome为默认浏览器.但QQ中不论点什么都是以搜狗打开,解决办法: 1.设置, 2. 安全设置-->安全推荐-->使用搜狗打开链接增强安全性.去掉勾勾就行 ...
- [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)
前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...
随机推荐
- MySQL-性能优化-优化设计和设计原则
MySQL性能优化目的如何合理的设计数据库?什么样的数据库设计才能给后期DBA优化提供基石? 数据库设计与程序设计的差异? 数据库设计早期优化1. 关系明确(理清表之间的关系,可以通过冗余的方式提高效 ...
- 关于ckeditor 之 上传功能
度了很多文章,看了很多关于ckeditor配置上传功能的文章,没一个写得清楚的, 就是简单的根目录下.config.js 增加 config.filebrowserUploadUrl="/a ...
- BinLog日志
一.概述 binlog 二进制日志文件,可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事 ...
- android项目1:打电话
android项目1:打电话 一.效果图 二.步骤 1.画好主界面 /call/res/layout/activity_main.xml <?xml version="1.0" ...
- Unity 和 3DMAx
3DMax转换成DAE模式才会有纹理信息.
- Les13 性能管理
目标 使用Oracle Enterprise Manager监视性能 使用自动内存管理(AMM) 使用内存指导调整内存缓冲区的大小 查看与性能相关的动态视图 排除无效和不可用对象产生的故障 性能监视 ...
- Android----Material Design之(FloatActionButton,CoordinatorLayout,CollapsingToolbarLayout,AppBarLayout,TabLayout等)
Material Design 的一些UI 平常开发还是用的比较多的,以前没写,最近总结一下,写一篇博客,要求版本在5.0以上. 主要介绍了FloatActionButton,CoordinatorL ...
- constructor&object 的联系与对比
构造函数与对象 构造函数是类中的特殊成员函数,用于为对象分配内存.它可用于为数据成员提供值.创建对象时将调用构造函数.它与类具有相同的名称.构造函数不返回任何值. 构造函数是生成对象的模板,一个构造函 ...
- Ansible 小手册系列 十(包含和角色)
一.包含 (include) 使用include模块来包含foo文件 tasks: - include: foo.yml --- foo.yml - name: test foo command: e ...
- 通过windows的超级终端连接华为交换机
如果你的电脑没有带COM接口 可以找一个COM--->USB的转换器 我前面有介绍过这么安装COM转USB设备的驱动 2 先打开你电脑的设备管理器 看看你的com接口数字编号 这里看到的是COM ...