2017-05-25 62 views
3

。我已經成功實現了標籤檢測並基於標籤,我知道我需要使用哪個類來提取數據。但是有一個問題,我需要使用/ tap來獲取數據的卡使用IsoDep技術,而不是NDEF。我知道如何從正在使用NDEF技術的卡上提取數據,但由於IsoDep技術,我在這裏卡住了。我與這個問題分享我的代碼片段,以便更好地理解。如何提取通過IsoDep技術數據 - 我使用NFC技術爲我的Android項目之一NFC(安卓)

if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) { 

Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG); 
IsoDep isoDep = IsoDep.get(tag); 
isoDep.connect(); 
//code to get the data from card 
isoDep.close() 
} 

所以在這裏我就要通過NFCAdapter和我越來越IsoDep,tech.NFcA,NdefFormattable作爲標記變量值的條件內TAG_DISCOVERED。我正在創建IsoDep類的實例並調用connect()方法。在這裏,我每次嘗試啓動連接以讀取數據時都會收到IOException,我不知道爲什麼! 任何人都可以幫我解決這個問題嗎?任何幫助將是可觀的。

感謝

回答

0

首先,您應檢查.get呼叫是否通過檢查是否isoDep == null工作。

至於你IOException,很難找出問題的具體原因,如果你不能提供的代碼。從標籤提取數據的方法因製造商而異。您注意到該標籤也支持NfcA,如果此技術不起作用,可能值得研究。

然而,有些事情要考慮:

  • 您是否嘗試過超過1個標籤?你能確認問題與標籤無關嗎?
  • 您是否正確設置了NFC權限設置?否則不合邏輯的IOException可能是因爲這個原因。
  • 你打電話從另一個線程.close()?這將導致IOException。
+0

感謝您的回覆@henrycjc我已經檢查了IsoDep的對象在我的情況不是null。同樣對於所有其他技術,我越來越空,所以我認爲我只需要在這種情況下使用IsoDep技術。 –

+0

只是爲了澄清,空檢查只是一個很好的做法,而不是解決問題的辦法。但是,你是說NfcA出現在'Tag.getTechList()'中,但是你不能成功'.get'?你確定你還沒有連接其他技術嗎?你也可以解決IOException的問題嗎?你想要做什麼還是有點不清楚。 – henrycjc

+0

好的,所以我再次檢查了我成功Nfca.get(標籤)。關於使用IsoDep技術執行任何操作時的IOException,我們需要首先連接()它,但是在執行此操作時收到IO異常。希望你有這個時間。 –

0

您可以使用PlayStore中的TagInfo來找出確切的卡片細節,然後從那裏開始工作。 TapLinxSDK可能會幫助你。