我有一个Gingerbread 2.3.4驱动的Nexus S,我最近得到了一些可写的NFC标签。到目前为止,我可以将它们作为空白标签读取,但我找不到向它们写入数据的方法。
我所有的研究都将我引向了这篇文章:从 1 月(2.3.4 发布之前)开始使用 Nexus S 编写标签。
如何使用 Nexus S 在应用程序中编写 NFC 标签?任何指针?
我有一个Gingerbread 2.3.4驱动的Nexus S,我最近得到了一些可写的NFC标签。到目前为止,我可以将它们作为空白标签读取,但我找不到向它们写入数据的方法。
我所有的研究都将我引向了这篇文章:从 1 月(2.3.4 发布之前)开始使用 Nexus S 编写标签。
如何使用 Nexus S 在应用程序中编写 NFC 标签?任何指针?
我发现 Android NFC API 文本和开发指南有点难以理解,所以这里有一些示例代码可能会有所帮助。这实际上是我在诺基亚 6212 设备中使用的 MIDP 代码的一个端口,所以我可能还没有正确了解有关 Android NFC API 的所有内容,但至少这对我有用。
首先我们创建一个 NDEF 记录:
private NdefRecord createRecord() throws UnsupportedEncodingException {
String text = "Hello, World!";
String lang = "en";
byte[] textBytes = text.getBytes();
byte[] langBytes = lang.getBytes("US-ASCII");
int langLength = langBytes.length;
int textLength = textBytes.length;
byte[] payload = new byte[1 + langLength + textLength];
// set status byte (see NDEF spec for actual bits)
payload[0] = (byte) langLength;
// copy langbytes and textbytes into payload
System.arraycopy(langBytes, 0, payload, 1, langLength);
System.arraycopy(textBytes, 0, payload, 1 + langLength, textLength);
NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
NdefRecord.RTD_TEXT,
new byte[0],
payload);
return record;
}
然后我们将记录写为 NDEF 消息:
private void write(Tag tag) throws IOException, FormatException {
NdefRecord[] records = { createRecord() };
NdefMessage message = new NdefMessage(records);
// Get an instance of Ndef for the tag.
Ndef ndef = Ndef.get(tag);
// Enable I/O
ndef.connect();
// Write the message
ndef.writeNdefMessage(message);
// Close the connection
ndef.close();
}
要写入标签,您显然需要可以从 Intent 中获取的 Tag 对象。
也许我在这里有点晚了,但我已经编写了一个库,用于创建、读取和写入您可能会发现有用的 NDEF 记录。
正如您可能已经了解到的那样,原生 Android NdefMessage 和 NdefRecord 类只是字节数组包装器,因此尽管 NDEF 标准在 NFC 论坛标准中得到了很好的指定,但目前 Android 中没有适当的高级支持。
该项目还包括读、写和梁模板活动:-)
NXP 是许多 NFC 兼容芯片的制造商,它制作了一个免费但封闭源代码的应用程序来操作 NFC 标签。我已经用它写了很多标签。
请参阅:NXP NFC Tagwriter 应用程序
https://market.android.com/details?id=com.nxp.nfc.tagwriter
如果您想为此编写代码,inazaruk 的链接会有所帮助,或者您可以尝试 O'Reilly “Programming Android”在线书籍。它有一个 NFC 部分:
http://programming-android.labs.oreilly.com/ch16.html#ch18_id316624
这不是最棒的书——我觉得它太密集了,而且有些部分写得不好——但它的 NFC 部分和代码示例是迄今为止我真正看到的除了 Android 自己的书之外的唯一一本。
要写入 NDEF 数据,您可以使用 Ndef.writeNdefMessage() API。
如果要写入非 NDEF 数据,则可以使用低级收发 API,例如 NfcA.transceive()、NfcB.transceive() 或 IsoDep.transceive()。您需要对正在与之通信的标签及其命令/响应有深入的了解。我不推荐这个。
NDEF 是标准数据格式,可以很容易地被 Android 和其他 NFC 平台读取。