Созданная схема Uri не запускает приложение Windows Phone

Я создаю схему Uri для своего приложения, следуя инструкциям здесь

Чтобы проверить это, я создал еще одно простое приложение для запуска исходного приложения с помощью события 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;
        }
    }
}

В методе 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>

Что мне не хватает?


person PutraKg    schedule 20.05.2014    source источник


Ответы (2)


Я думаю, это может быть потому, что ваш URI ничего не возвращает. Я не знаю, решили ли вы свою проблему, но если нет, в своем классе UriSchemeMapper попробуйте заменить строку «return uri;» этим

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

Не уверен, что это ваша проблема, надеюсь, это поможет

person DevBob    schedule 26.05.2014

В настоящее время ваш сопоставитель не выполняет никакого фактического сопоставления, поэтому вы никогда не возвращаете страницу XAML, на которую направляет пользователя. Без успешной начальной навигации оболочка будет отображать экран загрузки до тех пор, пока не сработает сторожевой таймер и не уничтожит ваше приложение.

Ответ Florian.C близок - вам действительно нужно вернуть ссылку на MainPage.xaml для случаев, когда вы запускается через свою схему URI. Однако, как только вы прикрепите 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;            
}
person Sean McKenna    schedule 06.06.2014