我有一部由Gingerbread 2.3.4驱动的Nexus S智能手机,并最近获得了一些可写的NFC标签。目前,我可以将它们读为空白标签,但是我找不到一种方法来向它们写入数据。
所有我的研究都引导我阅读这篇文章:在Nexus S上写入标签,该文章发布于1月份(在2.3.4版本之前)。
如何在您的应用程序中使用Nexus S向NFC标签写入数据?任何指针吗?
我有一部由Gingerbread 2.3.4驱动的Nexus S智能手机,并最近获得了一些可写的NFC标签。目前,我可以将它们读为空白标签,但是我找不到一种方法来向它们写入数据。
所有我的研究都引导我阅读这篇文章:在Nexus S上写入标签,该文章发布于1月份(在2.3.4版本之前)。
如何在您的应用程序中使用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();
}
要向标签写入内容,显然需要使用Tag对象,您可以从Intent中获取该对象。
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 数据,则可以使用低级别的 transceive API,例如 NfcA.transceive()、NfcB.transceive() 或 IsoDep.transceive()。您需要具有与您通信的标签及其命令/响应的高级知识。我不建议这样做。
NDEF 是标准数据格式,可以轻松地由 Android 和其他 NFC 平台读取回来。