【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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM