如何通过NFC标签启动我的应用程序?

11 浏览
0 Comments

如何通过NFC标签启动我的应用程序?

我目前正在将一个应用程序移植到UWP。该应用程序有一个带有“写入NFC”按钮的页面。用户点击该按钮后,它会等待一个NFC标签并写入一个LaunchApp:WriteTag二进制消息。

在WP8.1下运行良好的代码,在Windows 10 UWP下完全无法工作:

var proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();
if (proximityDevice != null)
{
    var launchArgs = "user=default";
    var appId = "App";
    var appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + appId;
    var launchAppMessage = launchArgs + "\tWindows\t" + appName;
    var dataWriter = new Windows.Storage.Streams.DataWriter();
    dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
    dataWriter.WriteString(launchAppMessage);
    var launchAppPubId = proximityDevice.PublishBinaryMessage("LaunchApp:WriteTag", dataWriter.DetachBuffer());
}

不幸的是,这并不奏效。NFC功能已启用,并且WP8.1应用程序在同一手机上运行良好,所以这不应该是个问题。

我已经尝试了多种格式,因为问题似乎在于launchAppMessage,但我没有找到UWP的文档。有一个Windows 8+的MSDN文章,描述了字符串的格式为:

myArgs\tWindows\tAppFamilyName!App

我尝试过的:

  1. myArgs足够短 - 不应该是问题。
  2. WindowsWindowsPhone没有任何区别。两者都不起作用。
  3. AppFamilyName是我的应用程序清单中正确的应用程序家族名称。该应用程序已与商店关联,看起来这也不是问题。
  4. App是在我的应用程序清单中的中。尝试MyAppNamespace.App也不起作用,并且调用CurrentApp.AppId(WinRT应用程序中使用的)会引发异常。

所谓“不起作用”,是指它写入了标签,但Windows 10完全无法识别该标签。

我发现的另一件事是,对于myArgs\tWindows\tAppFamilyName!App,应用程序抛出了以下异常 - 没有进一步的详细信息:

System.ExecutionEngineException was unhandled
Message: An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module.

我真的希望有人能够解决这个问题。不幸的是,目前还没有UWP的示例,文档仍然是旧的... :/

附:使用自定义协议和WindowsUri:WriteTag一起使用可以正常工作,但我只想让我的应用程序与NFC标签一起打开。此外,确认对话框会显示“是否要打开与mycustomprotocol关联的应用程序?” - 这看起来对用户不太友好。所以对我来说这不是真正的解决方案,更像是一个我不想使用的变通方法。

0