在Java中关闭NFC读卡器(NFC ACR122U)上的蜂鸣器

在Java中关闭NFC读卡器(NFC ACR122U)上的蜂鸣器,java,nfc,rfid,Java,Nfc,Rfid,我在使用NFC卡的java程序中使用ACR122U NFC读卡器。但默认情况下,读卡器在读卡时会发出蜂鸣音。我试图关闭它,但没有成功。NFC阅读器文档(在这里找到:)显示您可以关闭蜂鸣器。但是我很难为它编写java方法。正如您所看到的,我的类已经有了与NFC阅读器通信的方法。但我无法将文档中显示的命令转换为java方法 NFCcard等级: package dataStores; import java.util.List; import javax.smartcardio.Card; im

我在使用NFC卡的java程序中使用ACR122U NFC读卡器。但默认情况下,读卡器在读卡时会发出蜂鸣音。我试图关闭它,但没有成功。NFC阅读器文档(在这里找到:)显示您可以关闭蜂鸣器。但是我很难为它编写java方法。正如您所看到的,我的类已经有了与NFC阅读器通信的方法。但我无法将文档中显示的命令转换为java方法

NFCcard等级:

package dataStores;

import java.util.List;

import javax.smartcardio.Card;
import javax.smartcardio.CardChannel;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CommandAPDU;
import javax.smartcardio.ResponseAPDU;
import javax.smartcardio.TerminalFactory;

public class NFCcard {

    private TerminalFactory factory; 
    private List<CardTerminal> terminals;
    private CardTerminal terminal;
    private Card card ;
    public CardChannel cardChannel;


    public NFCcard() throws CardException {
        factory = TerminalFactory.getDefault();
        terminals = factory.terminals().list();
        terminal = terminals.get(0);
        card = terminal.connect("*");
        cardChannel = card.getBasicChannel();   
        cardChannel.transmit( new CommandAPDU(new byte[] { (byte)0xE0, (byte)0x00, (byte)0x00, (byte)0x21, (byte)0x01,(byte)0x77 }));
    }



    public String getCardID() throws CardException{
        String cardID = "";
        ResponseAPDU answer=cardChannel.transmit( new CommandAPDU(new byte[] { (byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x00 }));
        byte r[] = answer.getData();
          for (int i=0; i<r.length; i++)
              cardID+=r[i];
        return cardID;
    }

}
包数据存储;
导入java.util.List;
导入javax.smartcardio.Card;
导入javax.smartcardio.CardChannel;
导入javax.smartcardio.CardException;
导入javax.smartcardio.CardTerminal;
导入javax.smartcardio.CommandAPDU;
导入javax.smartcardio.responseADU;
导入javax.smartcardio.TerminalFactory;
公共级NFCcard{
私营终端厂;
专用列表终端;
私人卡终端;
私人卡;
公共信用卡渠道;
公共NFCcard()引发CardException{
factory=TerminalFactory.getDefault();
端子=工厂.terminals().list();
终端=终端。获取(0);
卡=终端。连接(“*”);
cardChannel=card.getBasicChannel();
传输(新命令ADDU(新字节[]{(字节)0xE0,(字节)0x00,(字节)0x00,(字节)0x21,(字节)0x01,(字节)0x77});
}
公共字符串getCardID()引发CardException{
字符串cardID=“”;
responseADU answer=cardChannel.transmit(新的CommandAPDU(新字节[]{(字节)0xFF,(字节)0xCA,(字节)0x00,(字节)0x00,(字节)0x00});
字节r[]=answer.getData();

对于(int i=0;i您可以尝试以下方法:

byte buzzerOn = (byte)0xFF;
byte buzzerOff = (byte)0x00;
byte clazz = (byte)0xFF;
byte ins = (byte)0x00;
byte p1 = (byte)0x52;
byte p2 = buzzerOff;
byte le = (byte)0x00;

byte[] apdu = new byte[]{clazz,ins,p1,p2,le};
ResponseAPDU answer = cardChannel.transmit( new CommandAPDU(apdu));

byte successSW1 = (byte)0x90;
byte successSW2 = (byte)0x00;
if(answer.getSW1() == successSW1 && answer.getSW2() == successSW2){
    //done
}else{
    //failed
}

当您想将其关闭时,响应必须为
90 00

?当检测到卡时?它只在扫描卡时发出蜂鸣器。您的意思是一旦检测到?是一旦检测到卡,蜂鸣器就会正常工作。谢谢谢谢谢谢!