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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。