10

我有一个Gingerbread 2.3.4驱动的Nexus S,我最近得到了一些可写的NFC标签。到目前为止,我可以将它们作为空白标签读取,但我找不到向它们写入数据的方法。
我所有的研究都将我引向了这篇文章:从 1 月(2.3.4 发布之前)开始使用 Nexus S 编写标签

如何使用 Nexus S 在应用程序中编写 NFC 标签?任何指针?

4

5 回答 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();
}

要写入标签,您显然需要可以从 Intent 中获取的 Tag 对象。

于 2011-06-13T13:53:06.507 回答
2

也许我在这里有点晚了,但我已经编写了一个,用于创建、读取和写入您可能会发现有用的 NDEF 记录。

正如您可能已经了解到的那样,原生 Android NdefMessage 和 NdefRecord 类只是字节数组包装器,因此尽管 NDEF 标准在 NFC 论坛标准中得到了很好的指定,但目前 Android 中没有适当的高级支持。

该项目还包括读、写和梁模板活动:-)

于 2012-11-26T23:32:37.557 回答
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 自己的书之外的唯一一本。

于 2011-06-09T15:40:42.387 回答
0

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

如果要写入非 NDEF 数据,则可以使用低级收发 API,例如 NfcA.transceive()、NfcB.transceive() 或 IsoDep.transceive()。您需要对正在与之通信的标签及其命令/响应有深入的了解。我不推荐这个。

NDEF 是标准数据格式,可以很容易地被 Android 和其他 NFC 平台读取。

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

于 2011-06-09T17:49:14.990 回答
0

NXP 的 tagwriter 是用于编写标签的出色应用程序。

我的公司有一个用于在云中编码和管理标签的应用程序,最近在西雅图举办了一个研讨会,让开发人员了解在 Android 中读取和写入 NFC 标签的过程。

用于读取写入NFC 标签的博客文章会介绍代码,并提供来自实际研讨会的支持视频剪辑。

希望这有助于一些开发人员开始使用 NFC!

于 2012-08-02T17:00:58.497 回答