0

我正在按照此处的步骤为我的应用程序创建一个 Uri 方案

为了测试这一点,我创建了另一个简单的应用程序来启动带有点击事件的原始应用程序

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        await Windows.System.Launcher.LaunchUriAsync(new System.Uri("startbackgroundwallpaper:"));
    }

在原始应用程序中,我有UriSchemeMapper

namespace StartBackgroundWallpaper
{
    class UriSchemeMapper : UriMapperBase
    {
        private string tempUri;

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

            // no parameters, desired launch to MainPage. no further code here.

            return uri;
        }
    }
}

在原始应用程序的InitializePhoneApplication()方法中,我有App.xaml.cs

      RootFrame.Navigated += CompleteInitializePhoneApplication;

        //Handle custom uri scheme
        RootFrame.UriMapper = new UriSchemeMapper();

现在,如果未安装原始应用程序,则Button_Click在简单应用程序中引发 时,它会正确列在搜索结果中。但是安装后,loading...屏幕显示,但应用程序从未加载。

在应用程序WMAppManifest.xml中,我还添加了

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

我错过了什么?

4

2 回答 2

1

我认为这可能是因为您的 URI 没有返回任何内容。我不知道你是否解决了你的问题,但如果没有,在你的 UriSchemeMapper 类中,尝试替换你的行“return uri;” 这样

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

不确定这是您的问题,希望对您有所帮助

于 2014-05-26T08:01:24.480 回答
0

目前,您的映射器没有进行任何实际的映射,因此您永远不会返回 XAML 页面来让用户登陆。如果没有成功的初始导航,shell 将显示加载屏幕,直到看门狗计时器启动并终止您的应用程序。

Florian.C 的答案很接近 - 对于通过 URI 方案启动的情况,您确实需要返回对 MainPage.xaml 的引用。但是,一旦将 UriMapper 附加到 RootFrame,每次导航都会调用它。因此,您需要检查这是基于您的方案的初始导航,还是只是您应用程序中的另一个导航。

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

     if (tempUri.Contains("encodedLaunchUri=startbackgroundwallpaper"))
          return new Uri("/MainPage.xaml", UriKind.Relative);
     else
          return uri;            
}
于 2014-06-06T05:56:42.527 回答