古老的 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)。具体查看注释是能够了解的。

参考资料

UWP 中的 LaunchUriAsync,使用默认浏览器或其他应用打开链接的更多相关文章

  1. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

  2. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  3. 淘宝UWP中的100个为什么

    从淘宝UWP第一版发布到现在,已经有十个月了,期间收到了用户各种各样的反馈,感谢这些用户的反馈,指导我们不断的修正.完善应用.但是也有一部分需求或建议,由于资源或技术的限制,目前确实无法做到,只能对广 ...

  4. 揭秘Windows10 UWP中的httpclient接口[2]

    阅读目录: 概述 如何选择 System.Net.Http Windows.Web.Http HTTP的常用功能 修改http头部 设置超时 使用身份验证凭据 使用客户端证书 cookie处理 概述 ...

  5. [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作

    这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...

  6. UWP中重用C/C++代码时踩过的一些坑

    标题中提到的UWP,主要是指用C#来写UWP的主工程,开发过程中可能需要调用C/C++实现的库. 为什么需要调用C/C++的库呢,举个例子,开源库OpenSSL实现了许多加密算法,稳定快速,我们想在应 ...

  7. 飞流直下的精彩 -- 淘宝UWP中瀑布流列表的实现

    在淘宝UWP中,搜索结果列表是用户了解宝贝的重要一环,其中的图片效果对吸引用户点击搜索结果,查看宝贝详情有比较大的影响.为此手机淘宝特意在搜索结果列表上采用了2种表现方式:一种就是普通的列表模式,而另 ...

  8. QQ中打开链接不是默认浏览器

    电脑上装了搜狗和Chrome,Chrome为默认浏览器.但QQ中不论点什么都是以搜狗打开,解决办法: 1.设置, 2. 安全设置-->安全推荐-->使用搜狗打开链接增强安全性.去掉勾勾就行 ...

  9. [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)

    前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...

随机推荐

  1. 关于JBoss的一些项目配置

    1. 如何使用 IP:port 的形式访问项目 : [1] 在standalone.xml文件中,查找<interfaces>标签,添加如下节点 : <interface name= ...

  2. PHP stream相关协议及上下文选项和参数归纳

    支持的协议和封装协议 PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen(). copy(). file_exists() 和 filesize() 的文件系统函数. 除了这些封装协 ...

  3. java实现赋值excel模板,并在新文件中写入数据,并且下载

    /** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new ...

  4. svn 教程

    1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录)   例如:svn checkout svn://192.168.1.1/pro/domain    ...

  5. C++实现矩阵压缩

    C++实现矩阵压缩 转置运算时一种最简单的矩阵运算.对于一个m*n的矩阵M,他的转置矩阵T是一个n*m的矩阵,且T(i,j) = M(j,i). 一个稀疏矩阵的转置矩阵仍然是稀疏矩阵. 矩阵转置 方案 ...

  6. HDU 4750 Count The Pairs ★(图+并查集+树状数组)

    题意 给定一个无向图(N<=10000, E<=500000),定义f[s,t]表示从s到t经过的每条路径中最长的边的最小值.Q个询问,每个询问一个t,问有多少对(s, t)使得f[s, ...

  7. Pandas:时间数据的季节分析

    最近在做论文的数据处理,涉及到不同年份不同季节的分析.另外还要求不同季节的数据可以单独分析. 其实思路还是比较简单的,那就在原始数据中增加一栏:季节 2013-05-21 Aotizhongxin 1 ...

  8. Esper——内存计算、事件驱动、SQL支持

    教程简介Esper是一个事件流处理(ESP)和事件关联引擎(CEP的,复杂事件处理).Esper的目标是针对实时事件驱动架构(EDA).当Esper监测到事件流中又符合条件的时间发生时,即可触发Pla ...

  9. Ansible 1.9.0发布 来一起看看这个配置管理新贵

    Ansible 1.9.0(版本代号是Dancing In the Street,Ansible每个主要版本代号都是VanHallen乐队的一首曲子)的主要变化是: Added kerberos su ...

  10. Git远程操作详解(新手必备)

    Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...