【Win10应用开发】协议-下篇:自定义多个协议

原文:【Win10应用开发】协议-下篇:自定义多个协议

前面介绍了如何为应用程序自定义协议,于是有朋友会问,我希望为我的应用注册多个协议,不同的协议处理不同的事情,能吗?答案是能的。

方法主要在配置清单文件上,这里我给出一个例子,示例应用将注册两个协议,分别为music:和video:。

在清单文件中找到Package/Applications/Application节点,在Application元素下增加Extensions节点,表示为应用程序声明的扩展,可以包含N个uap:Extension元素,一定要加上uap前缀,表明是用于通用应用的。正是利用了uap:Extension元素这个特点,可以为应用程序定义多个协议,但是,一定要记住:一个uap:Extension元素只能声明一个协议。

既然要多个协议,那就定义多个uap:Extension元素,如本例的清单文件定义如下:

      <Extensions>
        <uap:Extension Category="windows.protocol">
          <uap:Protocol Name="music"/>
        </uap:Extension>
        <uap:Extension Category="windows.protocol">
          <uap:Protocol Name="video"/>
        </uap:Extension>
      </Extensions>

Protocol元素的Name特性指定协议的名字。

接下来在App类中重写OnActivated方法,主要是从参数中取出激活应用程序的URI,再判断应用程序是被哪个协议激活的。

        protected override void OnActivated(IActivatedEventArgs args)
        {
            if (args.Kind == ActivationKind.Protocol)
            {
                ProtocolActivatedEventArgs parg = (ProtocolActivatedEventArgs)args;
                Uri uri = parg.Uri;
                string data = null;
                // 判断是哪个协议激活
                switch (uri.Scheme)
                {
                    case "music":
                        data = "音乐";
                        break;
                    case "video":
                        data = "视频";
                        break;
                    default:
                        data = null;
                        break;
                }

                // 显示页面
                Frame rootframe = Window.Current.Content as Frame;
                if (rootframe == null)
                {
                    rootframe = new Frame();
                    Window.Current.Content = rootframe;
                }
                rootframe.Navigate(typeof(MainPage), data);
            }
            Window.Current.Activate();
        }

 args.Kind的值很关键,因为应用程序可能被其他方式激活,如文件关联,所以这里必须判断。取得URI后,Scheme属性可以得到URI的架构名,即协议的名字,如上面定义的music、video。进而判断哪个协议激活了应用。

 

下面再写一个示例应用,用来通过协议激活上面的应用,在代码中可以用Launcher类的LaunchUriAsync方法来启动一个URI。

            Uri uri = new Uri(txt1.Text);
            await Windows.System.Launcher.LaunchUriAsync(uri);

测试结果如下图所示。

注意,在使用协议时,协议名称后面一定要加上冒号(英文),如music:。

 

示例下载地址:http://files.cnblogs.com/files/tcjiaan/protocol-part2.zip

 

时间: 2024-10-12 07:03:41

【Win10应用开发】协议-下篇:自定义多个协议的相关文章

Java URL自定义私有网络协议_java

--声明,脑残人士远离,本博客的核心不是if-else+前缀,而是如何通过URL协议处理框架定义私有协议 URI与URL的区别 URI (uniform resource identifier)统一资源标志符:URL(uniform resource location )统一资源定位符(或统一资源定位器):URI是一个相对来说更广泛的概念,URL是URI的一种,是URI命名机制的一个子集,可以说URI是抽象的,而具体要使用URL来定位资源.URI指向的一般不是物理资源路径,而是整个系统中的映射后

【Win10应用开发】自定义桌面壁纸

原文:[Win10应用开发]自定义桌面壁纸 调用通用的API来设置桌面壁纸,是一件既简单又有趣的事情,结合XAML可以生成图像的特性,你甚至可以做一个应用,让用户用他所拍的照片做成一张自定义壁纸,然后作为桌面壁纸. 这个API是通用的,应用运行在任意Windows设备上都能使用,当然包括手机.在Windows.System.UserProfile命名空间下,有一个叫UserProfilePersonalizationSettings的类,它可以修改锁屏壁纸和桌面壁纸,调用后会返回bool值,如果

【Win10应用开发】自定义打印选项

原文:[Win10应用开发]自定义打印选项 老周在前一篇烂文中已经给大伙伴们演示了如何打印UI元素,今天的烂文就向各位介绍一下,如何向打印对话框添加自定义选项.如果只是讲如何实现,会比较抽象,也比较枯燥,而且相当无聊,更是说不清楚,毕竟这打印API用起来要比其他API稍稍复杂了一点.所以老周就做了一个打印图片的垃圾应用,在打印对话框中,你可以选择设置要打印图片的不透明度.旋转角度(0度,90度,180度,270度). OK,为环保事业做贡献,老周今天也节约一点口水.下面咱们开始干活. 1.先来设

【Win10应用开发】自定义磁贴通知的排版

原文:[Win10应用开发]自定义磁贴通知的排版 前面老周用了两篇烂文,向大家介绍了Adaptive磁贴的模板使用.那些XML模板已经很强大了,不过,如果你觉得那些排版还不足以满足需求,不妨试试自己来定义磁贴的内容. 其实,Runtime App支持在后台任务中生成XAML呈现,只要你编写的后台任务类从XamlRenderingBackgroundTask(位于Windows.UI.Xaml.Media.Imaging命名空间)类派生即可.利用这一特性,我们可以在后台生成XAML布局,然后通过R

Win10 APP应用开发中如何自定义应用标题栏

Win 10 app对窗口标题栏的自定义包括两个层面:一是只定义标题中各部分的颜色,如标题栏上文本的颜色.三个系统按钮(最大化,最小化,关闭)的背景颜色等:另 一层是把窗口的可视区域直接扩展到标题栏上,当然三个系统按钮是保留的.也可以用某个UI元素来作为标题栏来呈现. 先看最简单的一层,即设置标题栏各部分的颜色. ApplicationView类表示当前应用程序视图相关操作,它公开了一个TitleBar属性,访问该属性可以获取到一个 ApplicationViewTitleBar实例,通过该Ap

Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

原文:Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App 安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneGap.ionic.AngularJS这些框架或库的关系,我个人理解是这样,PhoneGap是一个商业项目,用来实现HTML5式的跨平台开发,后来Adobe公司将其中的核心代码开源,就是Co

“Win10 UAP 开发系列”之主题模式切换

原文:"Win10 UAP 开发系列"之主题模式切换 微软动作真是快,本来想写WP8.1RT系列,结果刚整理了一点就出Win10 UAP了.不过还好RT到Win10的差别还不算太大.前两天参加了Win10开发极客秀,虽然没获奖,不过在韦恩卑鄙的帮助下顺利将澎湃新闻WP8.1版升级到了Win10UAP,使用了一些新的特性,最近争取有时间慢慢把一些东西总结一下. 今天先说一下如何在Win10 UAP中切换主题模式. 切换日间.夜间主题模式这个功能我从WP8就实现了,并封装成了一个库,用在我

Win10 UWP开发系列:开发一个自定义控件——带数字徽章的AppBarButton

原文:Win10 UWP开发系列:开发一个自定义控件--带数字徽章的AppBarButton 最近有个项目有一个这样的需求,在文章浏览页底部有几个AppBarButton,其中有一个是评论按钮,需要在评论按钮上显示一个红色数字,类似微信的新消息提醒: 这种设计在iOS和Android平台都是很常见的,但UWP上并没有提供现成的控件.所以只能自己实现一个了.   做出来效果是这样的:   分析一下实现的思路.首先这还是一个AppBarButton,只是其中增加了一个数字徽章的显示,这个属性应该是可

Win10 UWP 开发系列:使用SplitView实现汉堡菜单及页面内导航

原文:Win10 UWP 开发系列:使用SplitView实现汉堡菜单及页面内导航 在Win10之前,WP平台的App主要有枢轴和全景两种导航模式,我个人更喜欢Pivot即枢轴模式,可以左右切换,非常方便.全景视图因为对设计要求比较高,自己总是做不出好的效果.对于一般的新闻阅读类App来说,Pivot更适合多个频道的展示,因为内容基本都是一样的. 到了Win10,微软模仿其他平台也推出了汉堡菜单,但并没有提供现成的控件,而是需要开发者通过一个名为SplitView的控件来实现.我个人并不觉得左上