2013-06-25 100 views
1

我正在嘗試使用javax.smartcardio建立NFC連接。我可以在Windows上成功運行此代碼,但無法在Mac上運行。似乎問題是Mac的驅動程序,但我想知道是否有解決方案。Mac上的直接命令acr122u nfc

TerminalFactory factory; 
factory = TerminalFactory.getDefault(); 
CardTerminal terminal = factory.terminals().list().get(0); 
card = terminal.connect("direct");` 

注意:我必須使用直接命令。

編輯:爲什麼我必須使用直接命令是我需要的是提出了無卡時發送APDU命令。在其他協議(如T = 0,T = 1)中,當讀卡器上沒有卡(或設備)時,不能向讀卡器發送APDU命令。

+0

你可以指向這個''direct'***協議***被指定的文檔嗎?您可能需要專有的安全提供商才能使用此協議。 –

+0

這看起來沒有記錄。另一方面,有一些使用這個協議的例子(我也有一個只能在Windows上工作的例子:)) –

+0

我認爲有一種方法可以實現這一點:註冊一個提供你自己的終端實現的提供者(to能夠使用'getDefault()'方法,然後在返回的'終端'內實現''direct''協議,如果我沒有記錯,'javax.smartcardio'可以通過'Provider'擴展 –

回答

1

這很有趣,你必須使用"direct"命令 - 嗯,你說的命令,但實際上它是傳輸協議字符串。不幸的是API說其他(檢查到Java 7 SE)。

這是從connect(String)方法的JavaDoc的摘錄:

- 要使用的協議("T=0""T=1",或"T=CL"),或"*"使用任何可用的協議來連接。

如果不確定,我會選擇"T=1",它應該與現代卡和大多數PCSC閱讀器兼容。

+0

I'確保其他閱讀器支持這些T = *協議,但是我的閱讀器的自動輪詢機制與對等連接不兼容(使用Android 4.0+進行測試),所以我需要實現我自己的一個。直接協議 –

+0

順便說一句,我在問題中添加了一個編輯 –

+0

嗯,是的,我現在明白了:使用專有的讀取器命令直接與讀卡器通信。一個有趣的但不是便攜式的想法。 –