1

我正在尝试编写一个应用程序,该应用程序应在用户单击具有特定 url 的链接时自动启动(应该类似于“myscheme://myurl”)

我按照此链接上的说明进行操作 http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206987(v=vs.105).aspx 但是,它不起作用

这是我的代码的样子

在 WMAppManifest.xml 文件中,我在令牌之后添加了这个

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

然后我创建了一个名为 AssociationUriMapper.cs 的文件,其中包含

using System;
using System.Windows.Navigation;

namespace PhoneApp3
{
    class AssociationUriMapper : UriMapperBase
    {
        private string tempUri;

        public override Uri MapUri(Uri uri)
        {
            tempUri = System.Net.HttpUtility.UrlDecode(uri.ToString());

            //URI association for my scheme
            if (tempUri.Contains("myscheme:"))
            {
                return new Uri("/MainPage.xaml");
           }

            //else return
            return uri;
        }
    }
}

然后在 App.xaml.cs 我在“rootframe.navigated”之后添加了这一行

// Assign the URI mapper to the frame
RootFrame.UriMapper = new AssociationUriMapper();

现在根据我对我从 msdn 中包含的链接的理解,如果我在 Windows Phone 模拟器中访问 Internet Explorer 并输入类似“myscheme://something”的任何内容,它应该会自动启动我的应用程序(即使应用程序什么也不做前提是我暂时无法真正使用该网址,我只想让它打开我的应用程序)

我现在真的不知道该怎么做,我发现其他一些教程解释了完全相同的事情,所以我不明白为什么我的代码不起作用......

(顺便说一句,如果我犯了语法或拼写错误,抱歉,英语不是我的母语)

4

2 回答 2

1

你可以看看这个教程

这是它的引述:

什么会触发您的 URI 关联并启动您的应用程序:从 NFC 标签获取 URI。通过邮件获取 URI。单击包含 URI 的 HTML 链接。使用自定义协议进行网页重定向。从共享 URI 的 NFC 设备获取 URI。

还有一个:

什么不会触发您的 URI 关联并启动您的应用程序:直接在 Web 浏览器中输入 URI。从 Bing 搜索中扫描 QR 码。

因此,在浏览器中输入 URI 不起作用。要测试从另一个应用程序启动时您的应用程序的行为方式,您可以下载Shortcuts,创建自定义 URI 的快捷方式,然后在此处输入您要测试的 URI。

免责声明:我在 Enless Soft 工作,Shortcuts 是我们的应用程序之一。

于 2014-05-21T10:45:04.780 回答
0

因此,我将 MSDN 文章http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206987(v=vs.105).aspx中描述的代码添加到 Windows Phone 7.1 App

我的步骤与 Florian.C 描述的相同。现在的问题是,如果我添加:

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

我从 VS 收到一个错误,报告“协议”不能是扩展的子,它期待子扩展。是否可以让 OS 7.1 运行该方案?

于 2016-06-28T09:23:30.193 回答