创建的Uri Scheme不启动应用程序Windows Phone

本文关键字:应用程序 Windows Phone 启动 Uri Scheme 创建 | 更新日期: 2023-09-27 18:04:04

我正在为我的应用程序创建一个Uri Scheme,通过以下步骤

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

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

现在,如果原始应用程序没有安装,当Button_Click在简单的应用程序中提出时,它在搜索结果中正确列出。但是当它安装时,loading...屏幕显示,但应用程序从未加载。

在应用程序WMAppManifest.xml我也添加了

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

我错过了什么?

创建的Uri Scheme不启动应用程序Windows Phone

我认为这可能是因为你的URI没有返回任何东西。我不知道你是否已经解决了你的问题,但如果没有,在你的ur缺血性emapper类中,试着用这个

替换你的行"return uri;"
return new Uri("/MainPage.xaml", UriKind.Relative);

不确定这是你的问题,但希望它有助于

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

Florian.C的答案很接近——你确实需要返回一个对MainPage的引用。xaml用于通过URI方案启动的情况。然而,一旦你将一个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;            
}