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 ...
随机推荐
- 《用 Python 学微积分》笔记 2
<用 Python 学微积分>原文见参考资料 1. 13.大 O 记法 比较两个函数时,我们会想知道,随着输入值 x 的增长或减小,两个函数的输出值增长或减小的速度究竟谁快谁慢.通过绘制函 ...
- BZOJ3224 Tyvj 1728 普通平衡树(Treap)
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 解决silk-v3-decoder-master转换wav时,百度语音解析问题
$cur_dir/silk/decoder >& if [ ! -f "$1.pcm" ]; then /usr/local/ffmpeg/bin/ffmpeg -y ...
- Selenium入门练习(二)
自动登录博客园并且退出登录 package TestNG; import org.testng.annotations.Test;import org.testng.annotations.Befor ...
- C++(二十六) — 构造函数、析构函数、对象数组、复制构造函数
1.构造函数 (1)每个类都要定义它自己的构造函数和析构函数,是类的成员函数. 特点:名称与类名相同:没有返回值:一定是共有函数,可以直接访问类内所有成员函数:可以带默认形参,可以重载: class ...
- 设计模式--适配器模式C++实现
适配器模式C++实现 1定义Adapter 将一个类的接口变成客户端所需要的另外一种借口,从而使远不因为接口不匹配而无法合作的两个雷能够一起工作 又叫变压器模式,包装模式Wrapper 2类图 角色分 ...
- mac下通过brew切换php版本
第一步,先安装 brew Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具. Mac 自带ruby 所以安装起来很 ...
- QuerySetAPI笔记
学习Django时做的笔记MarkDown文件点这里 # 模型.objects:这个对象是`django.db.models.manager.Manager`的对象,这个类是一个空壳类,他上面的所有方 ...
- 经典问题:查询有多少段区间和等于k值
题目连接 题意:在大小为1e5以内的数组求存在多少个区间和的值等于k的次方 这种题很经常见,总是想着用两个for循环解决,但是一定会超时. 题解:算出前缀和,使用map去查找mp[sum[i+1]-t ...
- 获取img元素图片的实际尺寸
// Get on screen image var screenImage = $("#image"); // Create new offscreen image to tes ...