2014-10-14 4 views
2

NFC 태그에서 데이터를 지우려고 할 때 문제가 있습니다. MifareUltralight 유형의 NFC 태그를 사용하고 있습니다. 제발 해결책을 찾을 수 있도록 도와주세요. 여기 내 코드가있다. 나는 그것은 당신의 장치가 MifareUltralight 형식을 지원하지 않습니다 수 있습니다 hereandroid에서 NFC 태그 데이터를 지우는 방법은 무엇입니까?

if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { 
    mytag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
} 

NdefFormatable formatable = NdefFormatable.get(mytag); 

if (formatable != null) { // Here I'm getting formatable null 
    try { 
     formatable.connect(); 

     try { 
      formatable.format(methodGetMsg()); 
     } catch (Exception e) { 
      // let the user know the tag refused to format 
     } 
    } catch (Exception e) { 
     // let the user know the tag refused to connect 
    } finally { 
     try { 
      formatable.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} else { 
    // let the user know the tag cannot be formatted 
} 
+1

의 중복 가능성 [NdefFormatable를 사용하여 NFC 카드를 포맷 할 수 없습니다 (http://stackoverflow.com/questions/25512204/not-able-to-format-nfc-card-using-ndefformatable) –

답변

1

에서이 코드를 얻었다.

개발자 설명서에는 NFC가 포함 된 모든 Android 기기가 NdefFormatable 1을 지원해야하는 필수 태그 집합이 없다고 명시되어 있습니다.

NDEF와 호환되도록 태그 서식을 설정하면 종종 독점적 지식 2이 필요하기 때문입니다.

3

태그의 NDEF 메시지 컨텍스트에서 어떤 형식화가 의미하는지 이해하지 못할 수도 있습니다. 정확한 방법론은 태그마다 다르지만 '서식 지정'이 끝날 때 NDEF 태그는 특정 위치에 NDEF 매직 번호와 일부 메타 데이터 만 넣는 것으로 구성됩니다.

MIFARE Ultralight의 경우 매직 넘버는 일회용 프로그램 가능 메모리에 저장되므로 다른 NDEF 메시지를 쓸 수는 있지만 이미 포맷 한 후에는 NDEF 용 Ultralight를 포맷 할 수 없습니다 태그가 잠겨 있지 않은 것으로 가정하면 일반적으로 Android 기기는이를 인식하는 것으로 보이며 이미 포맷 된 Ultralights로 NdefFormatable을 사용할 수 없습니다. 다른 태그의 경우, NDEF 형식의 태그가 잠금 해제 된 Topaz 또는 형식 지정 비트를 다시 쓸 수있는 다른 태그 인 경우에도 NdefFormatable을 열거하면 매우 일치하지 않습니다.

NDEF 데이터를 Android로 덮어 쓰려면 가장 안정적인 방법은 Ndef를 사용하여 기존 Ndef 메시지를 새로운 것으로 덮어 쓰는 것입니다.

3

태그에 이미 android.nfc.tech.Ndef 기술이 나와 있으므로 이미 NDEF 메시지를 저장할 준비가되어 있으므로 추가 서식을 지정할 필요가 없습니다. Ndef 객체의 writeNdefMessage() 메서드를 사용하여 기존 NDEF 메시지를 덮어 쓸 수 있습니다 (태그가 읽기 전용이 아닌 경우). 예 : "형식"빈 NDEF 메시지에 태그에, 당신은 같은 것을 할 수있는 : 대답 마이클 롤랜드에 here 감사에서 가져온

Ndef ndefTag = Ndef.get(tag); 
ndefTag.writeNdefMessage(new NdefMessage(new NdefRecord(NdefRecord.TNF_EMPTY, null, null, null))); 

관련 문제