2017-01-08 70 views
0

我在使用NFC卡的java程序中使用ACR122U NFC閱讀器。但是,默認情況下,讀卡器在讀卡時發出嗡嗡聲。我試圖通過NFC閱讀器文檔(在這裏找到:http://www.acs.com.hk/download-manual/419/API-ACR122U-2.03.pdf)顯示您可以關閉蜂鳴器而失敗。但是我無法爲它寫一個java方法。正如你所看到的,我的班級已經有了與NFC閱讀器進行通信的方法。但是我無法將文檔中顯示的命令轉換爲java方法。關閉Java閱讀器(NFC ACR122U)上的蜂鳴器

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; 
    } 

} 
+0

當你想關掉它?當檢測到卡時? –

+0

當掃描卡時它只會發出蜂鳴聲。 – user2370794

+0

你的意思是儘快檢測到? –

回答

0

你可以嘗試這樣的事:

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

+0

完美工作。謝謝 – user2370794