首页 > 解决方案 > 读取和写入 NFC

问题描述

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

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

标签: javaandroidnfc

解决方案


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

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

我会改用enableReaderMode你可以控制声音提示的地方。

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

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

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

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

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

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

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

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

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


推荐阅读