0

我已经定义了一个自定义 URI 方案并将其添加到 App Manifest。

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

这会触发一个弹出窗口“接收内容 - 这将打开一个与 mycustomuri 关联的应用程序”。到目前为止一切正常,标签和 uri 玩得很好。但是,附加到每个标签上的 URI 的是一个唯一的 id。目的是,当检测到此自定义 URI 时,我的应用程序将打开,导航到“DetectTag.xaml”并将 ID 显示为 TextBlock。

这是我的协会 Uri Mapper 类。

class AssociationUriMapper : UriMapperBase
{
    private string tempUri;
public override Uri MapUri(Uri uri)
    {
        tempUri = System.Net.HttpUtility.UrlDecode(uri.ToString());
        // URI association launch for my app detected
        if (tempUri.Contains("mycustomuri:uid"))
        {
            // Get the category (after "Category=").
            int uidIndex = tempUri.IndexOf("uid");
            string uid = tempUri.Substring(uidIndex);
            // Redirect to the MainPage.xaml with the proper category to be displayed
            return new Uri("/DetectTag.xaml" + uid, UriKind.Relative);
        }
        // Otherwise perform normal launch.
        return uri;
    }

谁能告诉我哪里出错了?当我点击标签并接受提示时,调试器会在 NavigationFailed 处中断。

谢谢你。

4

1 回答 1

0

解决了

更改了标签和 Uri Mapper 的内容。

标记现在看起来像这样......

mycustomuri:uid?uid=00001

UriMapper 相应地改变了:

class AssociationUriMapper : UriMapperBase
{
    public bool uidFound;

    private string tempUri;
    public override Uri MapUri(Uri uri)
    {
        tempUri = System.Net.HttpUtility.UrlDecode(uri.ToString());
        // URI association launch for my app detected
        if (tempUri.Contains("mycustomuri:uid?uid="))
        {
            // Get the category (after "Category=").
            int uidIndex = tempUri.IndexOf("uid=")+7;
            string uid = tempUri.Substring(uidIndex);
            // Redirect to the MainPage.xaml with the proper category to be displayed
            return new Uri("/DetectTag.xaml?uid=" + uid, UriKind.Relative);
        }
        // Otherwise perform normal launch.
        return uri;
    }
}

为了完整起见,这里是用户被定向到的页面。

public partial class DetectTag : PhoneApplicationPage
{
    int uid;
    public DetectTag()
    {
        InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (NavigationContext.QueryString.ContainsKey("uid"))
        {
            uid = int.Parse(NavigationContext.QueryString["uid"]);
        }
        base.OnNavigatedTo(e);

        string stringUid = uid.ToString();
        tagID.Text = stringUid;

    }
}
于 2013-07-13T16:46:39.113 回答