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 ...
随机推荐
- apollo stomp client 代码示例
0.环境准备 0.1.linux 0.2.java 0.3.下载apollo二进制包,解压 0.4.创建broker,名字为 userlog {APOLLO_HOME}/bin/apollo crea ...
- css实现标题文字过长截取...
css实现网页中文字过长截取... title class应该这样写: .title{ width:300px; white-space:nowrap; overflow:hidden; text-o ...
- 英语每日阅读---5、VOA慢速英语(翻译+字幕+讲解):美国人口普查局表示美国人受教育程度提升
英语每日阅读---5.VOA慢速英语(翻译+字幕+讲解):美国人口普查局表示美国人受教育程度提升 一.总结 一句话总结: a.Thirty-four percent - college degree: ...
- 马哥教育python网络班19期 学习目标
马哥教育python网络班19期 学习目标: (1)按群里的学习进度表,来自行学习,学完时间6个月. (2)学完后,薪资能达到20K+每月.
- HDU 4815 概率dp,背包
Little Tiger vs. Deep Monkey Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K ( ...
- Neutron二层网络服务实现原理
网络 网络(network)是一个隔离的二层网段,类似于物理网络世界中的虚拟 LAN (VLAN).更具体来讲,它是为创建它的租户而保留的一个广播域,或者被显式配置为共享网段.端口和子网始终被分配 ...
- vue 可编辑表格组件
<template> <div class="table"> <table border="1px" v-dragform> ...
- js中Function的apply方法与call方法理解
最近在使用jQuery的$.each方法时很,突然想到$.each($('div'),function(index,entity){});中的这个index和entity是哪冒出来的,而且可有可无的, ...
- SpringInAction--Spring Web应用之SpringMvc 注解配置
Spring MVC 是当前Web服务器中常用的结构,今天就来学习这相关的知识,首先上图——Spring请求的时候所经历的坎坷之路: (书上原话,算是解释..) 在请求离开浏览器时① ,会带有用户所请 ...
- New Concept English there (3)
25words/ minutes Some time ago,an interesting discovery was made by archaeologists on the Aegean isl ...