2014-06-05 2 views
-3

질문이 있습니다. 읽을 수있는 태그 NFC 설명 유형의 코드 소스를 알 수 있습니다. Mifare 1k 또는 Ntag203 또는 다른 경우NFC 태그 정보

protected void onNewIntent(Intent intent){ 
    String[] techList = tag.getTechList(); 
    for(String tech:techList) { 
     //I think must insert here the code   
    } 
} 

답변

0

NFC 태그의 지문 인식은 쉽지 않습니다. 대부분의 태그는 "나는 XY"라고 말하지 않습니다. 또한 특정 태그 기술에는 여러 제조업체의 많은 태그가 존재합니다. 예 : NFC Forum Type 2 태그는 NXP, Infineon, Kovio 및 기타 업체에서 제작합니다.

NXP의 NFC 칩셋이있는 장치에서 태그가 MIFARE 클래식인지 알아내는 것은 간단합니다. 해당 장치에서 기술 목록에 android.nfc.tech.MifareClassic이 표시됩니다 (Tag.getTechList() 메서드 결과). 태그가 7 바이트 UID를 가지고

  1. 경우 (Tag.getId() 통해 얻을), 첫 번째 바이트가 나타내는 태그 제조 업체의 ISO 7816-6 등록 된 칩 제조업체 : 다른 NfcA 태그의 경우, 다음을 수행하여 시작할 수 암호. 예 : 등 NXP, 인피니언에 대한 0x05에 대한 0x04 당신이 칩 제조 업체를 알게되면, 당신은 태그 있는지 확인하는 당신이 GET_VERSION 명령을 보낼 수 NXP 태그의 태그 (예를 들어 중국 제조 업체 - 특정 명령을 보내려고 수

  2. NTAG/MF Ultralight EV1 태그 또는 Ultralight C인지 확인하는 인증 명령입니다. 일부 제조업체는 UID에 추가 칩 정보를 코딩합니다.

  3. 태그 메모리를 검색하여 메모리 크기를 찾고 해당 칩 유형을 결정할 수 있습니다.

+0

해답을 찾아 주셔서 대단히 감사합니다. 태그의 UID가 7 바이트가 아닌 경우 제조사를 알고 있습니까? – Luca

+0

태그 유형에 따라 태그/제조업체를 식별하는 데 사용할 수있는 태그 특정 기능이있을 수 있습니다. 그러나 7 바이트 UID가 아닌 경우 UID의 첫 번째 바이트를 기준으로 제조업체를 식별 할 수 없습니다. –

+0

예를 들어 Mifare Classic 또는 Mifare Ultralight에서 제조업체를 식별하는 다른 방법이 있습니까? – Luca

0

태그를 얻으면 TechList를 사용하여 정확한 태그 유형을 찾을 수 있습니다. 여기에 샘플입니다.

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

     } 
    } 
}