Создана схема Uri, не запускающая приложение Windows Phone
Я создаю схему 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>
Что мне не хватает?
3 ответа
Я думаю, что это может быть потому, что ваш URI ничего не возвращает. Я не знаю, решили ли вы свою проблему еще, но если нет, в вашем классе UriSchemeMapper попробуйте заменить строку "return uri;" этим
return new Uri("/MainPage.xaml", UriKind.Relative);
Не уверен, что это ваша проблема, надеюсь, это поможет
См. Эту ссылку Схема пользовательского URI для Windows Phone 8: запуск других приложений из вашего приложения.
Здесь вы можете скачать образец и проверить ваши следующие шаги.
В настоящее время ваш картограф не выполняет никакого фактического сопоставления, поэтому вы никогда не вернете страницу XAML, на которую пользователь может попасть. Без успешной начальной навигации оболочка будет отображать экран загрузки до тех пор, пока не активируется сторожевой таймер и не убьет ваше приложение.
Ответ 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;
}