C# 创建的Uri方案未启动应用程序Windows Phone

C# 创建的Uri方案未启动应用程序Windows Phone,c#,windows-phone-8,uri-scheme,C#,Windows Phone 8,Uri Scheme,我正在按照以下步骤为我的应用程序创建Uri方案 为了测试这一点,我创建了另一个简单的应用程序来启动带有点击事件的原始应用程序 private async void Button_Click(object sender, RoutedEventArgs e) { await Windows.System.Launcher.LaunchUriAsync(new System.Uri("startbackgroundwallpaper:")); } 在最初的应

我正在按照以下步骤为我的应用程序创建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;
        }
    }
}
在原始应用程序的
App.xaml.cs
中的
InitializePhoneApplication()
方法中

      RootFrame.Navigated += CompleteInitializePhoneApplication;

        //Handle custom uri scheme
        RootFrame.UriMapper = new UriSchemeMapper();
现在,如果未安装原始应用程序,则在简单应用程序中启动
按钮时,它将正确地列在搜索结果中。但安装后,会显示
加载…
屏幕,但应用程序从未加载

在app
WMAppManifest.xml
中,我还添加了

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


我遗漏了什么?

我想可能是因为您的URI没有返回任何内容。 我不知道您是否已经解决了问题,但如果没有,请在您的UriSchemeMapper类中,尝试将您的行“returnuri;”替换为


虽然不确定这是您的问题,但希望能有所帮助目前,您的映射程序没有进行任何实际映射,因此您永远不会返回XAML页面让用户登录。如果没有成功的初始导航,shell将显示加载屏幕,直到看门狗计时器启动并终止应用程序

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

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;            
}
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;            
}