• 【WP8】Uri关联启动第三方App


    在WP8中支持启动第三方应用程序,比如在App1中可以打开App2,你可以在你的应用程序中直接打开QQ,也可以让其他开发者调用你的APP,例如:软件盒子

    下面演示被调用方和调用方的使用方法,新建两个项目(GetApp 和 GiveApp)

    1、注册 URI 关联(GiveApp)

    在应用清单文件 WMAppManifest.xml 中指定相应的 URI 方案名。您的 URI 方案名可以是字母和数字的任意组合,但不能和系统内置的保留名冲突,这里注册为 ms-myapp1

      系统保留的Uri关联名称:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/jj207065(v=vs.105).aspx

      NavUriFragment 和 TaskID 两个参数不能改

    <Extensions>
      <Protocol Name="ms-myapp1" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
    </Extensions>
      注意:Extension标签要放在Tokens标签的后面

    2、定义Uri映射类,这里的逻辑可以自己写,所以也可以传递一些参数进来
            public class DirectionsRequestUriMapper : UriMapperBase
            {
                public override Uri MapUri(Uri uri)
                {
                    //这里定义处理uri的逻辑
    
                    //如果是又其他应用程序调用的,则为 "/Protocol?encodedLaunchUri=ms-myapp:"
                    var tempUrl = Uri.UnescapeDataString(uri.ToString());
    
                    tempUrl = tempUrl.Replace("/Protocol?encodedLaunchUri=", string.Empty);
                    if (tempUrl.Equals("ms-myapp1:"))
                    {
                        tempUrl = "/MainPage.xaml";
                    }
                    else if (tempUrl.StartsWith("ms-myapp1:"))
                    {
                        tempUrl = tempUrl.Substring(10);
                    }
    
                    return new Uri(tempUrl, UriKind.Relative);
                }
            }

      在App.xaml.cs中的初始化函数 InitializePhoneApplication 加入Uri映射

            private void InitializePhoneApplication()
            {
                //...
                
                RootFrame.UriMapper = new DirectionsRequestUriMapper();
            }

      这样就程序就可以接受第三方的调用了

    3、在GetApp中调用GiveApp,可以在uri后面接一些参数,如果调用的App可处理的话

            private async void Button_Click(object sender, RoutedEventArgs e)
            {
                var success = await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-myapp1:"));
                if (success)
                {
                    // Request succeeded.
                }
                else
                {
                    // Request failed.
                }
           }
    
    

    参考:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/jj206987(v=vs.105).aspx

  • 相关阅读:
    【C++】未定义的标识符“_TCHAR*”
    【C++】编写动态库DLL
    【C++】使用SQLite步骤及示例
    【VS】如何查询该项目是什么样工程类型
    新概念英语第一册单词
    地道情景表达一
    日常学习经典口语一
    全国省市区sql脚本
    关于Object.defineProperty
    响应式原理
  • 原文地址:https://www.cnblogs.com/bomo/p/3379018.html
Copyright © 2020-2023  润新知