我目前正致力于将应用移植到UWP。该应用程序有一个页面,其中包含"写入NFC"按钮。在用户点击它之后,它会等待NFC标记并写入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());
}
二进制消息。
什么在WP8.1下运行良好,在Windows 10 UWP下根本不起作用:
launchAppMessage
不幸的是,这不起作用。 NFC功能已启用,WP8.1应用程序可在同一部手机上运行,因此这不应成为问题。
我已经尝试了多种格式,因为问题似乎是myArgs\tWindows\tAppFamilyName!App
,我没有找到UWP文档。这是一篇Windows 8+ MSDN文章,它描述了格式为字符串的字符串:
myArgs
我尝试了什么:
Windows
足够短 - 不应该成为问题。WindowsPhone
或AppFamilyName
没有任何区别。两个都不工作。App
是我的应用清单中正确的应用系列名称。该应用与商店相关联,看起来这也不应该成为问题。<Application id="App" ... />
是我的应用清单中MyAppNamespace.App
内的内容。尝试CurrentApp.AppId
也没有效果,并且调用myArgs\tWindows\tAppFamilyName!App
(在WinRT应用中使用的内容)会引发异常。不工作&#34;我的意思是它写入标签,但Windows 10根本无法识别标签。
我发现的另一件事是,对于System.ExecutionEngineException was unhandled
Message: An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module.
,应用程序抛出以下异常 - 没有任何进一步的细节:
WindowsUri:WriteTag
我真的希望有人知道如何解决这个问题。不幸的是,目前还没有UWP样本,而且文档仍旧是旧的...:/
PS:使用自定义协议和{{1}}一起工作正常,但我只想用NFC标签打开我的应用。此外,确认对话框看起来像&#34;您是否要打开与mycustomprotocol相关联的应用程序?&#34; - 看起来不是非常用户友好。这对我来说不是真正的解决方案,更多我不想使用的解决方法。
答案 0 :(得分:5)
Windows 10移动UWP
如果您只定位Windows 10移动版,那么8.1方式仍然有效,因为您获得了正确的应用ID。它可以通过以下方式检索:
Windows.ApplicationModel.Store.CurrentApp.AppId
但是,仅在通过商店安装应用程序时才有效,因为在商店关联/发布期间分配了ID。在开发人员部署的构建版本中,API将通过“来自HRESULT的异常:0x803F6107”崩溃。
然后,生成的LaunchApp记录需要平台“WindowsPhone”和该应用程序ID。以下代码通过开源NFC / NDEF库(https://github.com/andijakl/ndef-nfc)创建LaunchApp标记,并在Windows 10 Mobile上运行 - 用于编写标记和启动应用程序。再一次 - 鉴于它已经出版&amp;通过商店安装:
var record = new NdefLaunchAppRecord { Arguments = "Hello World" };
var appId = Windows.ApplicationModel.Store.CurrentApp.AppId; // Note: crashes when app is not installed through app store!
record.AddPlatformAppId("WindowsPhone", appId);
var message = new NdefMessage { record };
proximityDevice.PublishBinaryMessage("NDEF:WriteTag", msgArray.AsBuffer(), MessageWrittenHandler);
Windows 10 PC
不幸的是,PC的情况有所不同。上面的方法在那里不起作用,Windows 8.1的文档化方法也没有。
我到目前为止最接近的是让Windows 10识别LaunchApp标签并在正确的页面上打开商店。但Windows /商店没有意识到应用程序已经安装,因此无法打开它。
这是代码,再次使用NFC / NDEF库:
var record = new NdefLaunchAppRecord { Arguments = "Hello World" };
var familyName = Windows.ApplicationModel.Package.Current.Id.FamilyName;
var appId = Windows.ApplicationModel.Store.CurrentApp.AppId; // Note: crashes when app is not installed through app store!
record.AddPlatformAppId("Windows", "{" + familyName + "!" + appId + "}");
var message = new NdefMessage { record };
proximityDevice.PublishBinaryMessage("NDEF:WriteTag", msgArray.AsBuffer(), MessageWrittenHandler);
当然,您也可以将两个平台ID合并为一个NFC标签,因为您有足够的可写内存,因为这些应用ID非常庞大。
答案 1 :(得分:1)
这是一种方式:
编程后台任务以在使用NFC标签轻触时激活,然后启动应用程序suing URI方案
//设置推荐的应用
var options = new Windows.System.LauncherOptions();
options.PreferredApplicationPackageFamilyName= "Contoso.URIApp_8wknc82po1e";
options.PreferredApplicationDisplayName = "Contoso URI Ap";
// Launch the URI and pass in the recommended app
// in case the user has no apps installed to handle the URI
var success = await Windows.System.Launcher.LaunchUriAsync(uriContoso, options);
答案 2 :(得分:0)
如果您有一个WP8.1应用程序并在Windows Phone 10上运行此应用程序并想要在手机上编写NFC标签,则必须检索Node * addFront( Node *first, double x, double y )
{
Node *temp = malloc( sizeof( Node ) );
if ( temp != NULL )
{
temp->x = x;
temp->y = y;
temp->next = first;
first = temp;
}
// start pf inline test
size_t size = 0;
for ( Node *current = first; current != NULL; current = current->next )
{
printf( "(%.4f, %.4f)\n", current->x, current->y );
++size;
}
printf( "Size: %zu\n", size );
// end pf inline test
return first;
}
。这是通过打开Windows Dev Center打开相应的应用,点击AppId
然后点击App Management
来完成的。然后在App identity
点下复制URL for Windows Phone 8.1 and earlier
并替换GUID