我正在使用NdefFormatable类来格式化我的NFC卡。代码如下:
NdefFormatable formatable=NdefFormatable.get(tag);
但是我将formtable reference作为null。我检查了在get(tag)方法中运行的代码。它检查:
if (!tag.hasTech(TagTechnology.NDEF_FORMATABLE)) return null;
我为我的标签运行了“tag.getTechList()”。我得到了:
android.nfc.tech.NfcA
android.nfc.tech.Ndef
我可以使用Trigger应用程序格式化此卡。
可以采取哪些措施来格式化。
答案 0 :(得分:6)
NdefFormatable
和Ndef
代码技术是互斥的。你的标签还没有NDEF格式化(即它还没有准备好存储NDEF消息),或者它已经准备好存储NDEF消息(并且已经包含(至少是空的)NDEF消息)。
因此NdefFormatable
仅用于将初始NDEF消息写入标记。
由于您的代码已经列出了android.nfc.tech.Ndef
技术,因此它已准备好存储NDEF消息,无需进一步格式化。您可以使用writeNdefMessage()
对象的Ndef
方法简单地覆盖(假设标记不是只读的)任何现有NDEF消息。例如。要将标签“格式化”为空的NDEF消息,您可以执行以下操作:
Ndef ndefTag = Ndef.get(tag);
ndefTag.writeNdefMessage(new NdefMessage(new NdefRecord(NdefRecord.TNF_EMPTY, null, null, null)));
<强>更新强>
在具有libnfc-nci NFC堆栈的设备上,似乎NdefFormatable
和Ndef
标记技术不再相互排斥。格式化标签将(有时?)枚举为NdefFormatable
和Ndef
。在这种情况下,您通常会首先尝试使用Ndef
,并且只有在失败时才使用NdefFormatable
对象。
答案 1 :(得分:0)
您的设备无法将标记格式化为NDEF。否则你会在技术列表中得到android.nfc.tech.NdefFormatable
。
但你仍然可以用NDEF格式读取和写入标签。
我猜Trigger只是将一条空信息写入Ndef标签。