【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

posted @ 2013-10-20 13:46  bomo  阅读(1940)  评论(1编辑  收藏  举报