Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 对NFC标签大小感到困惑_Android_Nfc - Fatal编程技术网

Android 对NFC标签大小感到困惑

Android 对NFC标签大小感到困惑,android,nfc,Android,Nfc,我刚刚启动了我的NFC应用程序,并尝试根据用户操作来写、读和删除内容。我几乎没有什么不懂的东西 关于尺寸 我有一个标签,上面写着一些数据。但是,当我试图在同一个标记上再次写入相同数量的数据时,我无法写入它。它使尺寸大于最大容量。是否有某种方法,因为其尺寸更大,或者有其他方法来减小尺寸 关于擦除数据 我还想删除我写在标签上的数据。是否有某种方法来擦除数据,或者我需要以写入数据的方式写入空字符串 有人能帮我吗。下面是我编写数据的代码 private boolean writeTag(Tag tag)

我刚刚启动了我的NFC应用程序,并尝试根据用户操作来写、读和删除内容。我几乎没有什么不懂的东西

关于尺寸

我有一个标签,上面写着一些数据。但是,当我试图在同一个标记上再次写入相同数量的数据时,我无法写入它。它使尺寸大于最大容量。是否有某种方法,因为其尺寸更大,或者有其他方法来减小尺寸

关于擦除数据

我还想删除我写在标签上的数据。是否有某种方法来擦除数据,或者我需要以写入数据的方式写入空字符串

有人能帮我吗。下面是我编写数据的代码

private boolean writeTag(Tag tag) 
    {
        NdefMessage message = new NdefMessage(createNdefRecords());
        try
        {
            // see if tag is already NDEF formatted
            Ndef ndef = Ndef.get(tag);
            if (ndef != null) 
            {
                ndef.connect();
                if (!ndef.isWritable())
                {
                    displayMessage("Read-only tag.");
                    return false;
                }

                // work out how much space we need for the data
                int size = message.toByteArray().length;
                if (ndef.getMaxSize() < size) 
                {
                    displayMessage("Tag doesn't have enough free space.");
                    return false;
                }

                ndef.writeNdefMessage(message);
                displayMessage("Tag written successfully.");
                return true;
            } 
        } 
        catch (Exception e)
        {
            displayMessage("Failed to write tag");
        }

        return false;
    }

private void addTempData()
    {
        data.add("10");
        data.add("1");
        data.add("1");
        data.add("245");
        data.add("40238");
        data.add("0");  

    }

    public NdefRecord[] createNdefRecords()
    {
        NdefRecord[] ndefRecords = new NdefRecord[data.size()];
        for(int i=0; i < data.size(); i++)
        {
            NdefRecord record  = getNdefRecord(data.get(i));
            ndefRecords[i] = record;
        }

        return ndefRecords;
    }

    private NdefRecord getNdefRecord(String data)
    {
        NdefRecord record = new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, MimeType.TYPE.substring(1).getBytes(), new byte[] {}, data.getBytes());

        return record;
    }
看看这个

这是我的NFC图书馆。如果需要,您可以使用此功能:


您确定有可写的NFC标记吗?您如何验证代码中的数据是否适合标记?您定义了6条记录,根据您选择的记录类型和MIME类型,每个记录都有自己的头。除了要存储的网络数据之外,还需要空间。您是否与NDEF规范中的标题定义进行了交叉检查?参见:,例如NFCForum-TS-RTD_1.0和NFCForum-TS-NDEF_1。0@Robert是的,那是可以写的。我可以这样说,因为如果我插入的数据很少,那么这些数据就会反映在标记中,当我读取标记时,我会得到我所拥有的数据inserted@corvairjo我明白你的意思。我是NFC的新手,刚刚开始我的第一个应用程序。我从您的评论中了解到,我需要使用单个标题并插入数据,这样标题就不会占用额外的空间。你能给我一个示例代码来实现这一点吗。我正在浏览你的链接。如何将数据划分为记录取决于你的应用程序和你的需要。您只需要知道每个记录都有一个标头,它也会占用标记上的空间。您不需要自己创建头,这是由操作系统在通过NdefRecord构造函数或createMimeString mimeType、byte[]mimeData等方法创建NDEF记录时完成的。