2017-01-08 47 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リーダー(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