如何在NFC标签上写入新字符串

时间:2019-05-12 18:55:02

标签: java android nfc

每次单击Button时,我想在NFC标签上写一个新字符串。问题在于,只要检测到标签并按下按钮,保存的前一个字符串就会被新的字符串覆盖。

我遵循了一些在线教程,以找到有效的代码。标签被检测到很好。读写没有问题。

这是在标记中写入文本的两个功能:

     **********************************Write to NFC Tag****************************
     ******************************************************************************/
    private void write(String text, Tag tag) throws IOException, FormatException {
        NdefRecord[] records = { createRecord(username) };
        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();
    }
    private NdefRecord createRecord(String text) throws UnsupportedEncodingException {
        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 recordNFC = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,  NdefRecord.RTD_TEXT,  new byte[0], payload);

        return recordNFC;
    }

我想在每次按下按钮时创建一个新记录,或者想检索字符串并添加新记录。

例如按钮只按了一次

Hi I'm a string!

例如按钮两次按下

Hi! I'm a string! Hi I'm a string!

1 个答案:

答案 0 :(得分:1)

Ndef.writeNdefMessage方法将覆盖tag上的NdefMessage。

我建议您首先检索消息并生成一个新的String。然后用新的String覆盖标记消息,即创建的内容。