为了账号安全,请及时绑定邮箱和手机立即绑定

设置和获取 NdefRecord ID

设置和获取 NdefRecord ID

胡子哥哥 2021-07-13 17:00:28
我正在尝试在 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 只打印“”(不可打印的字符串值周围的引号)。


查看完整回答
反对 回复 2021-07-29
  • 1 回答
  • 0 关注
  • 209 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信