读取和写入NFC

问题描述 投票:1回答:1

我正在编写一个可读取和写入标签的Android应用程序。当我读取所有内容时,一切正常,当我尝试将数据保存在nfc标记上时,标记第一个读取的数据并再次打开活动,如何阻止意图读取并正确保存数据?

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

java android nfc
1个回答
0
投票

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

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

我会在要控制声音提示的地方使用enableReaderMode

更新请注意,使用enabledReaderMode时,您仍然可以在清单中放置Intent过滤器,以要求Android OS在看到某种类型的标签时启动您的应用,而清单Intent过滤器生成的Intent始终在Activity的onCreate方法中进行处理无论您在“活动”中如何处理卡片。

[enableForegroundDispatch同样也不可靠读取,因为操作系统在看起来像没有窗口的活动中处理NFC读取,因此您的活动在读取时会暂停”

我已经通过enableForegroundDispatch进行了真实的用户测试,当您的应用位于前台,您的应用被暂停,标签超出范围并重新进入范围之前,该标签进入您的应用范围机会被恢复,因此OS认为没有东西在等待它的Intent,因此打开它自己的窗口,显示NDEF数据的基本屏幕,而不是尝试将Intent传递给仍然暂停的Activity。

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

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

答案enableReaderMode写页面中的低级读取https://stackoverflow.com/a/59397667/2373819的示例与读取在结构上没有太大差异。

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

您应该将onNewIntent视为一个通知,告知您标签在您可以读写标签的范围内(在enableReaderMode方法中,它被称为onTagDiscovered,因为它的确是这样。)

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

© www.soinside.com 2019 - 2024. All rights reserved.