我正在尝试在 Android 上写入和读回许多 NdefRecords,但在检索记录 ID 时遇到问题。我相信这是因为它们最初没有被写入标签。我正在创建我的记录: private NdefRecord createRecord(String text, byte ID) throws UnsupportedEncodingException { String lang = "en"; byte[] textBytes = text.getBytes(); byte[] langBytes = lang.getBytes("US-ASCII"); int langLength = langBytes.length; int textLength = textBytes.length; byte[] id = new byte[1]; id[0] = ID; int idLength = id.length; byte[] payload = new byte[1 + langLength + textLength + idLength]; payload[0] = (byte) langLength; //set use id flag payload[0] |= (1 << 3); // copy langbytes and textbytes into payload System.arraycopy(langBytes, 0, payload, 1, langLength); System.arraycopy(textBytes, 0, payload, 1 + langLength, textLength);// System.arraycopy(id, 0, payload, 1 + langLength + textLength, idLength); NdefRecord recordNFC = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, id, payload); return recordNFC; }public void addRecord(String record_contents, RECORD_IDS record_id) throws UnsupportedEncodingException { this.records.add(createRecord(record_contents, (byte) record_id.getValue()));}我以为我在做某事// System.arraycopy(id, 0, payload, 1 + langLength + textLength, idLength);但它对我没有用。此方法将 NdefRecords 存储在类对象中,然后使用public void writeStoredRecords(Tag tag) throws IOException, FormatException { NdefRecord[] final_records = (NdefRecord[]) this.records.toArray(new NdefRecord[0]); NdefMessage message = new NdefMessage(final_records); try { Ndef ndef = Ndef.get(tag); if (ndef != null) { ndef.connect(); if(!ndef.isWritable()) return; ndef.writeNdefMessage(message); ndef.close(); } }catch(Exception e){}}记录对象在调用后填充了它们的 ID,new NdefRecord但是当使用应用程序NXP TagInfo读取标签时,NDEF 记录 ID 显示为“”。有人对这个有经验么?由于记录 ID 很少与 NFC 一起使用,因此在线资源稀缺。
1 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
根据 NFC 论坛 NDEF 规范,NDEF 记录的 ID 字段必须是 URI。因此,NXP TagInfo 会将此值视为 URI 字符串并将字节数组解码为字符串(我不太确定他们期望哪种编码,但浏览 NDEF 规范,我期望 US-ASCII 编码)。
由于您使用单个字节作为 ID 字段,因此该值可能不会解码为可打印字符。因此,NXP TagInfo 只打印“”(不可打印的字符串值周围的引号)。
添加回答
举报
0/150
提交
取消