我正在编写一个可读取和写入标签的Android应用程序。当我读取所有内容时,一切正常,当我尝试将数据保存在nfc标记上时,标记第一个读取的数据并再次打开活动,如何阻止意图读取并正确保存数据?
我有一个运行4个片段的活动,在活动中读取代码,并且从片段中调用写作机制
对于写入,我不会使用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
,因为它的确是这样。)