繁体   English   中英

读取和写入 NFC

[英]Reading and writing to NFC

我正在编写一个 Android 应用程序来读取和写入标签。 当我阅读一切正常时,当我尝试将数据保存在 nfc 标签上时,标签首先读取数据并再次打开活动,如何阻止从意图读取并正确保存数据?

我有一个运行 4 个片段的活动,读取代码在活动中,并且从片段中调用写入机制

对于写入,我不会使用enableForegroundDispatch方法,它会误导用户过快地将卡移出范围,导致真实用户使用时出现大量写入错误和数据损坏。

这是因为在您的代码有机会写入卡之前,操作系统读取卡后直接发生声音提示。

我会使用enableReaderMode而不是您可以控制声音提示的地方。

使用enabledReaderMode更新注意,您仍然可以将 Intent 过滤器放在清单中,以要求 Android 操作系统在看到某种类型的标签时启动您的应用程序,无论如何,从 Manifest Intent 过滤器生成的 Intent 始终在您的 Activity 的onCreate方法中处理您正在“活动”中处理卡片。

此外, enableForegroundDispatch读取enableForegroundDispatch可靠,因为操作系统在看起来像无窗口的 Activity 中处理 NFC 读取,您的 Activity 将在读取时暂停。

我已经使用enableForegroundDispatch进行了真实用户测试,当您的应用程序处于前台时,您的应用程序被暂停,标签超出范围并在您的应用程序有机会恢复之前回到范围内时,标签进入范围因此操作系统认为没有任何东西在等待来自它的意图,因此打开它自己的窗口显示 NDEF 数据的基本屏幕,而不是尝试将意图传递给您仍然暂停的活动。

另一个建议是,如果您可以轻松使用 NDEF 格式,则不要使用 NDEF 格式,因为操作系统理解 NDEF,它会尝试使用它来做事,使用您自己的格式意味着操作系统不太可能干扰您正在做的事情。 但是,如果您想写入的数据不止一页,则会更加复杂,但是您确实获得了更好的错误处理能力。

使用enableReaderMode您的应用程序在读卡时不会暂停(而是在应用程序中的单独线程中处理卡交互),您可以控制声音,因此您可以在完成写入时播放声音,而不是在完成写入时播放声音任务完成了一半。

回答https://stackoverflow.com/a/59397667/2373819 中的低级阅读enableReaderMode示例编写页面在结构上与阅读没有太大区别。

更新:重新阅读您的代码,似乎您在编写代码时假设标签在范围内。 因为标签可以轻松频繁地进出或范围,所以一旦onNewIntent被触发,就可以更可靠地写入。

您应该将onNewIntent视为标记在您可以从/向标记读取或写入的范围内的通知(在enableReaderMode方法中,它被称为onTagDiscovered因为它确实是这样。)

更新:添加了有关如何处理读/写逻辑以实现可靠写入的流程图。 读/写逻辑

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM