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

简介: 原文:【Win10应用开发】协议-下篇:自定义多个协议 前面介绍了如何为应用程序自定义协议,于是有朋友会问,我希望为我的应用注册多个协议,不同的协议处理不同的事情,能吗?答案是能的。 方法主要在配置清单文件上,这里我给出一个例子,示例应用将注册两个协议,分别为music:和video:。

原文:【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

 

目录
相关文章
|
7月前
嵌入式开发中自定义协议的解析与组包
嵌入式开发中自定义协议的解析与组包
|
8月前
|
消息中间件 存储 小程序
直播小程序源码有用的协议知识:MQTT协议
MQTT协议能够帮助直播小程序源码平台进行可靠高效的消息传输、实时数据统计分析、实时推送订阅消息与辅助弹幕和实时评论,让直播小程序源码平台向着高质量平台方向迈进,是重要的协议之一。
直播小程序源码有用的协议知识:MQTT协议
[源代码] RS485和modbus协议通讯实例 详细代码 项目案例
[源代码] RS485和modbus协议通讯实例 详细代码 项目案例
|
12月前
|
XML JSON JavaScript
网络游戏开发-客户端2(自定义websocket协议格式)
网络游戏开发-客户端2(自定义websocket协议格式)
160 0
|
传感器
Kwp2000协议的应用(程序原理篇)
Kwp2000协议的应用(程序原理篇)
257 0
Kwp2000协议的应用(程序原理篇)
|
存储 数据采集 网络协议
Linux网络原理与编程(2)——第十二节 应用层协议(以HTTP为例)
协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的。更准确点来说,收发是按照比特位的形式进行的。
180 0
Linux网络原理与编程(2)——第十二节 应用层协议(以HTTP为例)
|
网络协议 Android开发 数据安全/隐私保护
HarmonyOS系统中内核实现MQTT协议开发的方法
大家好,今天主要来聊一聊,如何使用鸿蒙开始实现MQTT协议开发的方法
257 1
HarmonyOS系统中内核实现MQTT协议开发的方法
|
网络协议 测试技术 开发工具
游戏协议测试二:协议工具开发技术介绍
游戏客户端通常是与服务器直接进行通信,如何通过工具来进行协议的修改和创建呢?第一种就是直接在客户端代码里面增加一些类似GM指令的测试接口,来达到对每个接口的测试目的。第二种就是从外部对双方的通讯网络下手,通过第三方将协议截获修改后再发送给对方,从而达到协议测试的目的如图1,本篇文章就是针对第二种方式来做介绍。
1082 0
游戏协议测试二:协议工具开发技术介绍
|
缓存 中间件 测试技术
【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权
原文:【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权 【.NET Core项目实战-统一认证平台】开篇及目录索引 上篇文章我们介绍了网关使用Redis进行缓存,并介绍了如何进行缓存实现,缓存信息清理接口的使用。
1446 0
|
存储 算法 数据安全/隐私保护