2015-02-09 8 views
6

मैं एनएफसी एंड्रॉयड पुस्तकालय के साथ एक ISO15693 आरएफआईडी टैग को पढ़ने के लिए कोशिश कर रहा हूँ पढ़ http://img42.com/gw07d+एंड्रॉयड एनएफसी ISO15693 आरएफआईडी टैग

टैग आईडी सही ढंग से पढ़ा लेकिन डेटा है टैग में नहीं है।

onCreate विधि:

// initialize NFC 
    nfcAdapter = NfcAdapter.getDefaultAdapter(this); 
    nfcPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 

onNewIntent विधि:

if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) { 

     currentTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
     byte[] id = currentTag.getId(); 
     Tag_data_TextDisplay.setText("TagId:" + Common.getHexString(id)); 

     for (String tech : currentTag.getTechList()) { 

      if (tech.equals(NfcV.class.getName())) { 
       NfcV nfcvTag = NfcV.get(currentTag); 

       try { 
        nfcvTag.connect(); 
        txtType.setText("Hello NFC!"); 
       } catch (IOException e) { 
        Toast.makeText(getApplicationContext(), "Could not open a connection!", Toast.LENGTH_SHORT).show(); 
        return; 
       } 

       try { 
        byte[] cmd = new byte[]{ 
          (byte) 0x00, // Flags 
          (byte) 0x23, // Command: Read multiple blocks 
          (byte) 0x00, // First block (offset) 
          (byte) 0x04 // Number of blocks 
        }; 
        byte[] userdata = nfcvTag.transceive(cmd); 

        userdata = Arrays.copyOfRange(userdata, 0, 32); 
        txtWrite.setText("DATA:" + Common.getHexString(userdata)); 

       } catch (IOException e) { 
        Toast.makeText(getApplicationContext(), "An error occurred while reading!", Toast.LENGTH_SHORT).show(); 
        return; 
       } 
      } 
     } 
    } 

userdata है मूल्य 0x02 ({ 0x02 }) के साथ एक एकल बाइट सही होने के बाद Transceive विधि समाप्त होता है।

+0

और इसे क्या पढ़ा जाना चाहिए? –

+0

@RandykaYudhistira जहां मैं टैग पढ़ता हूं http://img42.com/mHBPa+ – yoshgoodman

+0

उपयोगी होगा यदि आप हमें 'nfcvTag.transceive (cmd); (बिना 32 बाइट्स के पैडिंग) के वास्तविक परिणाम दिखा सकते हैं। इसके अलावा, क्या आप यह सुनिश्चित कर सकते हैं कि हेक्स रूपांतरण के लिए आपके बाइट-सरणी प्रत्येक बाइट को दो हेक्टेयर अंकों तक पैड करता है (अन्यथा मूल्य की व्याख्या करना मुश्किल होगा)। –

उत्तर

2

तो आपको transceive विधि से { 0x02 } का मान प्राप्त होता है। जैसा कि this thread में पाया गया है, यह तब हो सकता है जब आप unaddressed कमांड का उपयोग करते हैं। इसलिए, आपको हमेशा NfcV के माध्यम से संबोधित आदेश भेजना चाहिए (क्योंकि ऐसा लगता है कि एंड्रॉइड डिवाइस पर सभी एनएफसी चिपसेट में समर्थित है)। आपके मामले में, आप इस तरह कुछ उपयोग किए गए रीड मल्टीप्ले ब्लॉक्स कमांड उत्पन्न करने के लिए उपयोग कर सकते हैं:

int offset = 0; // offset of first block to read 
int blocks = 1; // number of blocks to read 
byte[] cmd = new byte[]{ 
     (byte)0x60,     // flags: addressed (= UID field present) 
     (byte)0x23,     // command: READ MULTIPLE BLOCKS 
     (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // placeholder for tag UID 
     (byte)(offset & 0x0ff),  // first block number 
     (byte)((blocks - 1) & 0x0ff) // number of blocks (-1 as 0x00 means one block) 
}; 
System.arraycopy(id, 0, cmd, 2, 8); 
byte[] response = nfcvTag.transceive(cmd); 
+0

धन्यवाद, यह – yoshgoodman

+0

काम करता है 'System.arraycopy (id, 0, cmd, 2, 8); करो – yoshgoodman

+0

जावा प्रलेखन में समझाया गया है: ऑफ़सेट [2] से शुरू होने वाले सरणी [0] से ऑफसेट [0] से शुरू होने वाले सरणी [0] से शुरू होने वाले सरणी [8 आईडी] से तत्वों की प्रतियां [8]। * " –

संबंधित मुद्दे