无法使用NdefFormatable格式化NFC卡

jsb*_*sht 1 tags format android nfc ndef

我正在使用NdefFormatable类来格式化我的NFC卡.代码如下:

NdefFormatable formatable=NdefFormatable.get(tag);
Run Code Online (Sandbox Code Playgroud)

但是我将formtable reference作为null.我检查了在get(tag)方法中运行的代码.它检查:

if (!tag.hasTech(TagTechnology.NDEF_FORMATABLE)) return null;
Run Code Online (Sandbox Code Playgroud)

我为我的标签运行了"tag.getTechList()".我有:

android.nfc.tech.NfcA
android.nfc.tech.Ndef
Run Code Online (Sandbox Code Playgroud)

我能够使用Trigger应用程序格式化此卡.

可以做些什么来格式化这个.

Mic*_*and 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)));
Run Code Online (Sandbox Code Playgroud)

更新: 在具有libnfc-nci NFC堆栈的设备上,似乎NdefFormatableNdef标签技术不再相互排斥.格式化标签将(有时?)枚举为NdefFormatableNdef.在这种情况下,您仍然通常会尝试使用第Ndef一个,并且只有在失败时才使用该NdefFormatable对象.