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