创建的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没有返回任何东西。我不知道你是否已经解决了你的问题,但如果没有,在你的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;
}