当我尝试擦除NFC标签中的数据时,我遇到了问题。我正在使用MifareUltralight型NFC标签。请有人帮我找到解决方案。这是我的代码。我从here
获得了此代码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
}
答案 0 :(得分:3)
我认为您可能无法理解标签上NDEF消息上下文中的格式化含义。确切的方法因标签而异,但在一天结束时格式化' NDEF的标签只包括将NDEF幻数和一些元数据放在某个位置。
对于MIFARE Ultralight,幻数存放在一次性可编程存储器中,因此在您已经格式化后,实际上无法为NDEF格式化Ultralight,尽管您假设标签未锁定,可以向其写入不同的NDEF消息。一般来说,Android设备似乎认识到这一点,并且不允许您将NdefFormatable与已经格式化的Ultralights一起使用。对于其他标签,如果NDEF格式的标签将枚举NdefFormatable,即使它是未锁定的Topaz或其他可以再次写入格式化位的标签,它也会高度不一致。
如果您想用Android覆盖NDEF数据,最可靠的选择是使用Ndef覆盖现有的Ndef消息。
答案 1 :(得分:3)
由于您的标记已经列出了android.nfc.tech.Ndef技术,因此它已准备好存储NDEF消息,不需要进一步格式化。您可以使用Ndef对象的writeNdefMessage()方法简单地覆盖(假设标记不是只读的)任何现有的NDEF消息。例如。要将标签“格式化”为空的NDEF消息,您可以执行以下操作:
Ndef ndefTag = Ndef.get(tag);
ndefTag.writeNdefMessage(new NdefMessage(new NdefRecord(NdefRecord.TNF_EMPTY, null, null, null)));
答案来自here感谢Michael Roland
答案 2 :(得分:1)