Windows Phone 8 通过一个app启动另一个app


 

Winphone8 通过app启动第三方app需要被启动的app支持,具体操作步骤如下:

 

假设要通过PhoneApp2启动PhoneApp1

 

PhoneApp1端做的操作如下:

1、注册Protocol,即,用xml编辑器打开WMAppManifest.xml,在</Tokens>节点后面添加如下内容:

<Extensions>
      <Protocol Name="phoneapp1" NavUriFragment="encodeLaunchUri=%s" TaskID="_default"/>
</Extensions>

其中Name的值是需要声明的,其余的值都不能修改

注意,不要和Windows Phone 8自带的Uri关联冲突,http://msdn.microsoft.com/zh-cn/library/jj207065

 

2、在App.xaml.cs中做如下修改:

(1)、声明一个类,用来处理关联的Uri
 

class ProtocolUriMapper : UriMapperBase

    {

        private string tempUri;



        public override Uri MapUri(Uri uri)

        {

            tempUri = uri.ToString();



            if (tempUri.Contains("/Protocol"))

            {

                //接收到的Uri地址形如Protocol?encodedLaunchUri=contoso%3APage2

                int index = tempUri.LastIndexOf("%3A");

                if (index <= 0)

                {

                    return uri;

                }

                tempUri = tempUri.Substring(index + 3);

                switch (tempUri)

                {

                    case "Page2":

                        return new Uri("/Page2.xaml", UriKind.Relative);

                    case "Page3":

                        return new Uri("/Page3.xaml", UriKind.Relative);

                    default:

                        return new Uri("/MainPage.xaml", UriKind.Relative);

                }

            }

            return uri;

        }

    }

 

(2)、在 InitializePhoneApplication()方法体内添加一段代码

 

 RootFrame.UriMapper = new ProtocolUriMapper();

 

效果如下所示:

 private void InitializePhoneApplication()

        {

            if (phoneApplicationInitialized)

                return;



            // 创建框架但先不将它设置为 RootVisual;这允许初始

            // 屏幕保持活动状态,直到准备呈现应用程序时。

            RootFrame = new PhoneApplicationFrame();

            RootFrame.Navigated += CompleteInitializePhoneApplication;



            RootFrame.UriMapper = new ProtocolUriMapper();



            // 处理导航故障

            RootFrame.NavigationFailed += RootFrame_NavigationFailed;



            // 在下一次导航中处理清除 BackStack 的重置请求,

            RootFrame.Navigated += CheckForResetNavigation;



            // 确保我们未再次初始化

            phoneApplicationInitialized = true;

        }


 

PhoneApp1端的修改就结束了,接下来修改PhoneApp2

3、在需要启动PhoneApp1的地方添加如下代码,跳转完之后关闭当前app

 Windows.System.Launcher.LaunchUriAsync(new Uri("phoneapp1:Page2"));

 Application.Current.Terminate();


这样就成功完成app之间的跳转

 

参考资料:http://technet.microsoft.com/zh-cn/magazine/jj206987(VS.105).aspx

你可能感兴趣的:(windows phone)