java - 读取和写入 NFC
问题描述
我正在编写一个 Android 应用程序来读取和写入标签。当我阅读一切正常时,当我尝试在 nfc 标签上保存数据时,标签首先读取数据并再次打开活动,如何阻止读取意图并正确保存数据?
我有一个运行4个片段的活动,阅读代码在活动中,写入机制是从片段中调用的
解决方案
对于写入我不会使用该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
因为它确实是这样。)
推荐阅读
- excel - VLookUp 值到另一个工作表
- javascript - 在彼此下的html中显示数组
- batch-file - 使用批处理复制和覆盖现有文件
- android - 如何使用动态 id 使用动态密钥在改造中解析 json
- java - 我应该如何发送 Postgis 几何数据?WKT 还是 WKB?
- jenkins - 是否可以通过在实际脚本中列出参数而不是在作业配置中来在 Jenkins 中创建参数化脚本化管道
- node-red - 我的本地 node-red 服务器的根目录是什么?
- excel - 用于提取单元格值并存储在单独文件中的 VB 脚本
- docker - 如何验证 docker 映像的签名?
- c++ - 这个可变参数模板如何使用?