在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();
} 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