zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    反射机制小结
    IO流小节
    C# 利用file打印日志
    JS判断表单内容是否更改过
    input file 样式以及获取选择文件方法集合
    JS判断终端浏览器类型
    Node.js服务的重启与监控
    ASP.NET MVC 与Form表单交互
    JS 更改表单的提交时间和Input file的样式
    My SQL和LINQ 实现ROW_NUMBER() OVER以及Fatal error encountered during command execution
  • 原文地址:https://www.cnblogs.com/tcjiaan/p/4476888.html
Copyright © 2011-2022 走看看