使用Nexus S编写NFC标签

10

我有一部由Gingerbread 2.3.4驱动的Nexus S智能手机,并最近获得了一些可写的NFC标签。目前,我可以将它们读为空白标签,但是我找不到一种方法来向它们写入数据。
所有我的研究都引导我阅读这篇文章:在Nexus S上写入标签,该文章发布于1月份(在2.3.4版本之前)。

如何在您的应用程序中使用Nexus S向NFC标签写入数据?任何指针吗?


我使用免费的 NFC Tagwriter 应用程序 https://market.android.com/details?id=com.nxp.nfc.tagwriter 写了几个。 - squigglesNbits
5个回答

16

我发现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();
}

要向标签写入内容,显然需要使用Tag对象,您可以从Intent中获取该对象。


2
也许我有点晚了,但是我编写了一个来创建、读取和写入NDEF记录,您可能会发现它很有用。
您可能已经了解到,原生的Android NdefMessage和NdefRecord类仅是字节数组包装器,因此尽管NFC论坛标准中NDEF标准已经相当好地规定,但目前在Android中没有适当的高级支持。
该项目还包括读取、写入和传输模板活动 :-)

1
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自己的。


请注意,当使用NXP编写标签时,似乎会更改标签的身份验证,因此只能使用此应用程序重新编写标签。 - neufuture
我在想为什么NXP SDK在使用NXP自己的应用程序写入NDEF消息后无法写入卡片。这不是很奇怪吗? - Andrei Drynov

0

要编写 NDEF 数据,您可以使用 Ndef.writeNdefMessage() API。

如果您想编写非 NDEF 数据,则可以使用低级别的 transceive API,例如 NfcA.transceive()、NfcB.transceive() 或 IsoDep.transceive()。您需要具有与您通信的标签及其命令/响应的高级知识。我不建议这样做。

NDEF 是标准数据格式,可以轻松地由 Android 和其他 NFC 平台读取回来。

http://developer.android.com/reference/android/nfc/tech/Ndef.html#writeNdefMessage(android.nfc.NdefMessage)


0

NXP的TagWriter是一个很棒的标签编写应用程序。

我的公司最近在西雅图举办了一个研讨会,介绍了在Android中读写NFC标签的过程。我们有一个云端应用程序,用于编码和管理标签。

有关读取编写NFC标签的博客文章详细介绍了代码,并附有来自实际研讨会的支持视频剪辑。

希望这能帮助一些开发人员开始使用NFC!


你是否与你所链接的网站有关联? - Andrew Barber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接