无法使用NdefFormatable格式化NFC卡

时间:2014-08-26 17:54:20

标签: android tags format nfc ndef

我正在使用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应用程序格式化此卡。

可以采取哪些措施来格式化。

2 个答案:

答案 0 :(得分:6)

NdefFormatableNdef代码技术是互斥的。你的标签还没有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堆栈的设备上,似乎NdefFormatableNdef标记技术不再相互排斥。格式化标签将(有时?)枚举为NdefFormatableNdef。在这种情况下,您通常会首先尝试使用Ndef,并且只有在失败时才使用NdefFormatable对象。

答案 1 :(得分:0)

您的设备无法标记格式化为NDEF。否则你会在技术列表中得到android.nfc.tech.NdefFormatable

但你仍然可以用NDEF格式读取和写入标签。

我猜Trigger只是将一条空信息写入Ndef标签。