[英]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.