Windows Phone:在应用之间导航

时间:2014-01-09 15:33:22

标签: windows-phone-7 windows-phone-8 windows-store-apps

我的应用需要包含指向同一部​​手机中第二个应用的链接。 如果未安装该应用程序,则链接应指向Windows应用商店进行安装(该部分工作正常)。 但是如果已经安装了应用程序,则链接应该直接进入应用程序并打开它。我怎样才能做到这一点? 该应用程序有两个版本,一个是WP7,另一个是WP8。如果解决方案不同,请指出差异。

感谢您的帮助...

2 个答案:

答案 0 :(得分:1)

我相信URI Association就是你想要的。您应该能够在WP7应用程序和WP8应用程序中创建不同的关联,并相应地处理它们。

  

URI关联允许您的应用在其他应用启动特殊URI时自动启动。

另请注意:

  

如果您只对启动自己的应用感兴趣,请考虑使用   来自Windows.Phone.Management.Deployment命名空间的API。您可以   使用此API检查您已发布的其他应用,然后   如果安装它们就启动它们。

您基本上只需更新WMAppManifest.xml文件以包含URI关联,然后侦听该URI。例如:

<Extensions>
  <Protocol Name="contoso" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
</Extensions>

然后您可以使用自定义URI映射器来处理您的关联(上面顶部链接中的完整示例):

public override Uri MapUri(Uri uri)
{
   tempUri = System.Net.HttpUtility.UrlDecode(uri.ToString());

   // URI association launch for contoso.
   if (tempUri.Contains("contoso:ShowProducts?CategoryID="))
   {
      // Get the category ID (after "CategoryID=").
      int categoryIdIndex = tempUri.IndexOf("CategoryID=") + 11;
      string categoryId = tempUri.Substring(categoryIdIndex);

      // Map the show products request to ShowProducts.xaml
      return new Uri("/ShowProducts.xaml?CategoryID=" + categoryId, UriKind.Relative);
    }

    // Otherwise perform normal launch.
    return uri;
}

希望这有帮助!

答案 1 :(得分:0)

您创建的辅助应用程序是否已成立?如果是这样,请执行以下操作:

IEnumerable<Package> packages = InstallationManager.FindPackagesForCurrentPublisher();

foreach (Package package in packages)
{
    if (package.Id.ProductId.ToString().ToLower() == "product id of secondary app")
    {
         //Launch the app
         package.Launch();
    }
}

确保您的发布商ID在两个应用的WMAppManifest中匹配。

如果此辅助应用程序是由其他人发布的,则您需要使用自定义Uri架构。该应用需要开发人员添加此功能,您不能只启动任何应用。