2011-03-13 140 views
18

新的2.3.3 SDK包含改進的NFC支持,我想編寫一個依賴於此的應用程序。最終,我希望能夠從同時進入該領域的多個標籤中讀取數據,但Android似乎僅在進入該領域的第一個標籤上觸發 - 後續的標籤將被忽略。在Android中同時讀取多個NFC標籤

從我使用的標籤(Mifare Classic)閱讀NFC規範(ISO/IEC 14443-3),我應該能夠發送一個'halt'命令給標籤,這會導致它停止迴應,並讓我閱讀該領域的下一個標籤。 Android不支持在任何TagTechnology子類上直接使用halt命令,所以我嘗試直接使用transceive(new byte[] {0x50, 0x00})直接發送它。這會拋出一個IOException,並顯示「收發失敗」消息。

無可否認,我正在從主線程完成所有這些,我知道這是一個糟糕的主意,但我只是想盡可能簡單地測試這個概念。

是否可以同時與字段中的多個標籤進行通信?我究竟做錯了什麼?

回答

8

你想要的是不幸的是沒有可能的,此刻,除非你做一些非常先進的兩輪牛車,這幾乎不是一個好主意:)

也許,如果你在發送正確的字節數,你可以停止卡transceive(),正如你現在要做的那樣。但是,由於暫停(或者說,您試圖發送的HLTA)是ISO14443-3A命令,所以這不會通過MifareClassic接口工作 - 該接口使用「加密」管道。直接在NfcA接口上傳輸,不幸的是不能與當前的堆棧一起工作。

即使您可以讓卡停止,這也不會自動導致手機中的NFC芯片繼續輪詢新標籤 - 因爲您正在「繞過」堆棧。

+0

感謝您的明確答案! – 2011-04-12 04:08:35

0

您是否成功發送過使用收發器(如讀取塊(0x30,0x(塊))或驗證扇區命令的其他命令?只是想你可能想要確保你首先正確使用收發器。

+0

好點。我還沒有嘗試過直接與transcieve做任何事情;我會放棄它。 – 2011-03-14 00:50:24

+0

調用'readBlock()'(認證後)工作正常;就像調用與'readblock()'輸出相同字節的'transceiver()'一樣。儘管如此,嘗試暫停卡仍會產生'IOException'。 – 2011-03-14 01:19:17

1

根據我的短暫經驗,您不能使用多個標籤。 如果兩個標籤都在該字段中,您沒有收到標籤中的ID,則它是二進制零。 所以我的猜測是,在這一點上,你只能訪問一個標籤,並且只能有一個在該字段中。

+0

儘管RF協議支持衝突解決和解析多個標籤 - 所以問題是,爲什麼當我試圖停止對已經閱讀的標籤時發生錯誤? – 2011-03-16 16:40:16

+0

僅僅是因爲SDK不同時支持衝突或多個轉發器。 我不知道這個錯誤,但是當這個時候你收到一個意圖,當一個轉發器進入這個域時,這個意圖就是一個標籤。 根據標籤協議,您目前可以找到其他標籤的UID,因爲SDK太有限。 乾淨的解決方案將涉及支持多個標籤的更新的SDK。 當然,我可以想象一些「黑客」或使用NDK來克服目前的侷限性。 – Nolife 2011-03-22 09:48:10

+0

由於看起來這是最接近我們將得到答案,你可以更新您的問題與額外的信息? – 2011-03-23 22:24:03