在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