设置并获取NdefRecord ID

时间:2018-08-17 18:16:23

标签: java android format nfc ndef

我试图在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){}
}

调用new NdefRecord之后,记录对象的ID会被填充,但是当使用应用程序 NXP TagInfo 读取标签时,NDEF记录ID将显示为“”。

有人对此有任何经验吗?由于NFC很少使用记录ID,因此在线资源也很稀缺。

1 个答案:

答案 0 :(得分:1)

根据NFC论坛NDEF规范,NDEF记录的ID字段必须是URI。因此,NXP TagInfo会将这个值视为URI字符串,并将字节数组解码为字符串(虽然我不太确定他们希望使用哪种编码,但是浏览NDEF规范,我希望使用US-ASCII编码)。

由于您使用单个字节作为ID字段,因此该值可能不会解码为可打印字符。因此,恩智浦TagInfo仅打印“”(不可打印的字符串值周围的引号)。