【问题标题】:Writing NFC tags using a Nexus S使用 Nexus S 编写 NFC 标签
【发布时间】:2011-06-08 18:23:08
【问题描述】:

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

如何使用 Nexus S 在应用程序中编写 NFC 标签?有什么指点吗?

【问题讨论】:

标签: android nfc nexus-s


【解决方案1】:

我发现 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】:

    也许我来晚了,但我写了library 用于创建、读取和写入您可能会觉得有用的 NDEF 记录。

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

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

    【讨论】:

      【解决方案3】:

      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 编写标签时似乎会更改标签上的身份验证,因此只能使用此应用程序重写它们。
      • 我想知道为什么在我使用 NXP 自己的应用程序写入 NDEF 消息后,NXP SDK 无法写入卡。是不是很奇怪?
      【解决方案4】:

      要写入 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)

      【讨论】:

        【解决方案5】:

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

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

        reading 和 writing NFC 标签的博文会介绍代码并提供来自实际研讨会的支持视频片段。

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

        【讨论】:

        • 您是否偶然隶属于您要链接的网站?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多