Java 使用smartcardio的Acs读卡器acr122,如果我们没有';之前不要启动ACR122自动控制
我正在使用smartcardio api将数据从NFC ACR 122u读卡器写入Android手机 这是我正在使用的代码:Java 使用smartcardio的Acs读卡器acr122,如果我们没有';之前不要启动ACR122自动控制,java,nfc,Java,Nfc,我正在使用smartcardio api将数据从NFC ACR 122u读卡器写入Android手机 这是我正在使用的代码: TerminalFactory factory = TerminalFactory.getDefault(); List<CardTerminal> terminals = factory.terminals().list(); if (terminals==null || terminals.size()==0) { le.warn("nfcRea
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
if (terminals==null || terminals.size()==0) {
le.warn("nfcReaderPresent no terminal found");
return false;
}
terminal = terminals.get(0);
try {
boolean res=terminal.waitForCardPresent(5*1000);
if (res)
interrupt=true;
}
catch(Exception p) {
le.error("pushData p="+p);
le.fatal(p);
}
if (terminal.isCardPresent()) {
card = terminal.connect("*");//it seems always to be T=1
ATR atr=card.getATR();
CardChannel channel = card.getBasicChannel();
le.debug("card: " + card+" channel="+channel+" atr="+ByteArrayToHexString(atr.getBytes()));
//ADPU command
byte getDataCmd[]={(byte)0xFF,(byte)0xCA,(byte)0x00,(byte)0x00,(byte)0x00};
sendCommand(getDataCmd,channel);
...
TerminalFactory工厂=TerminalFactory.getDefault();
列表端子=工厂.terminals().List();
如果(端子==null | |端子.size()==0){
le.warn(“未找到终端的NFCREADER”);
返回false;
}
终端=终端。获取(0);
试一试{
布尔res=终端waitForCardPresent(5*1000);
如果(res)
中断=真;
}
捕获(异常p){
le.错误(“pushData p=“+p”);
致死性(p);
}
if(terminal.isCardPresent()){
card=terminal.connect(“*”)//似乎总是T=1
ATR ATR=card.getATR();
CardChannel=card.getBasicChannel();
le.debug(“卡:“+card+”通道=“+channel+”atr=“+byteArrayTohextString(atr.getBytes())”);
//ADPU命令
字节getDataCmd[]={(字节)0xFF,(字节)0xCA,(字节)0x00,(字节)0x00,(字节)0x00};
sendCommand(getDataCmd,通道);
...
错误javax.smartcardio.CardException:sun.security.smartcardio.PCSCException:SCARD_E_READER_UNAVAILABLE
在发送APDU命令之前发生
当我在工具ACR122UTool之前启动并单击Connect时,一切正常。(不再需要ACR122UTool)
acs工具似乎初始化了设备
任何帮助都将不胜感激