簡體   English   中英

讀取和寫入 NFC

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM