2012-11-12 299 views
0

我目前正在開發一個應用程序,它會讀取NFC tags目前我已經寫代碼即可獲得TAG id什麼,我要做什麼?我怎樣才能讀取所有數據,如果intent額外命名EXTRA_NDEF_MESSAGES是空的。Android的讀取NFC標籤數據

讀取RFID我對現在的代碼是

public void onNewIntent(Intent intent) { 
     Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 

     String zin = tag.getTechList()[0]; 
     info.setText("TagID: " + bytesToHex(tag.getId())+" Saturs: "+zin);  

} 

我想知道如何在NFC tag讀取所有數據。

謝謝媒體鏈接!

+0

我很困惑,你讀RFID或NFC標籤? – ThomasRS

+0

@Thomas對此抱歉,我想閱讀RFID。 – J1and1

+0

那你爲什麼使用NfcAdapter? (如在NFC!= RFID) – ThomasRS

回答

0

取決於你的標籤的類型。對於超輕MIFARE一個例子

Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
MifareUltralight uTag = MifareUltralight.get(tagFromIntent); 
uTag.connect(); //You should enclose this into a try-catch because of probably IOException 
byte[] data = uTag.readPages(INDEX_OF_PAGES_YOU_WANT); //This returns 4 consecutive pages from the offset you declared. Each page weights 4 bytes 
uTag.close(); 
+0

謝謝!那只是做了我需要的東西:D – J1and1

0

有多種類型的NFC標籤(例如,超輕的Mifare,超輕的Mifare C,MIFARE經典,FeliCa的......)的。 每個標籤有不同的內存大小和閱讀程序。 例如:超輕型的Mifare有64字節,但MIFARE經典1K含有1千字節存儲器。 要從mifare ultratralight讀取數據,不需要額外的認證,但Mifare classic需要認證。 當你得到新的意向可以分析它來獲取標記信息:

@Override 
    protected void onNewIntent(Intent intent){  
     getTagInfo(intent) 
     } 
    private void getTagInfo(Intent intent) { 
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
    String[] techList = tag.getTechList(); 
    for (int i = 0; i < techList.length; i++) { 
    if (techList[i].equals(MifareClassic.class.getName())) { 

     MifareClassic mifareClassicTag = MifareClassic.get(tag); 
     switch (mifareClassicTag.getType()) { 
     case MifareClassic.TYPE_CLASSIC: 
      //Type Clssic 
      break; 
     case MifareClassic.TYPE_PLUS: 
      //Type Plus 
      break; 
     case MifareClassic.TYPE_PRO: 
      //Type Pro 
      break; 
     } 
    } else if (techList[i].equals(MifareUltralight.class.getName())) { 
    //For Mifare Ultralight 
     MifareUltralight mifareUlTag = MifareUltralight.get(tag); 
     switch (mifareUlTag.getType()) { 
     case MifareUltralight.TYPE_ULTRALIGHT: 
      break; 
     case MifareUltralight.TYPE_ULTRALIGHT_C: 

      break; 
     } 
    } else if (techList[i].equals(IsoDep.class.getName())) { 
     // info[1] = "IsoDep"; 
     IsoDep isoDepTag = IsoDep.get(tag); 

    } else if (techList[i].equals(Ndef.class.getName())) { 
     Ndef.get(tag); 

    } else if (techList[i].equals(NdefFormatable.class.getName())) { 

     NdefFormatable ndefFormatableTag = NdefFormatable.get(tag); 

    } 
    } 
    } 
    } 

當你得到確切的標籤,然後你要開始閱讀程序該標籤。 閱讀標籤完整的項目在這裏My GitHub Repo