当前位置: 首页 > 知识库问答 >
问题:

Android NFC标签记录不可读取

卞浩漫
2023-03-14

我有一个小项目要将数据写入Ntag 213、215和216。

我成功地使用MifareUltraLight方法写入数据。问题是当我使用 NfcTools 扫描时,数据格式与我预期的不同。

这是我期望的格式。

这是我得到的格式。

我希望当Ntag扫描时,如果没有安装应用程序,它会打开浏览器。

我使用Mi的方法,因为N标签将受密码保护。我尝试了两种不同的方式来写入数据。

>

  • 我使用命令N瘤手动处理写入功能。你可以看到下面的代码

     fun writePages(msg: String, mifare: MifareUltralight) {
         val uriString = Uri.parse(msg).normalizeScheme().toString()
         val subsUri = Uri.parse(msg).host.toString()
    
         val encodedPayload2 = uriString.toByteArray()
    
         val encodedData = byteArrayOf(0xD1.toByte(), 0x01.toByte(), (subsUri.length).toByte(), 0x55.toByte()) + encodedPayload2
    
         val tlvEncodedData = byteArrayOf(0x03.toByte(), encodedData.size.toByte()) + encodedData + byteArrayOf(0xFE.toByte())
    
         var currentPage = 4
         for (i in tlvEncodedData.indices step 4) {
             var currentBlock = i + 4
             if (currentBlock > tlvEncodedData.size) {
                 currentBlock = tlvEncodedData.size
             }
    
             val data = tlvEncodedData.sliceArray(i until currentBlock)
             var command = byteArrayOf(0xA2.toByte(), currentPage.toByte()) + data
    
             if (command.size < 6) {
                 for (w in command.size until 6) {
                     command += 0.toByte()
                 }
             }
             mifare.transceive(command)
             currentPage += 1
         }
     }
    

    我尝试使用这个简单的项目写入数据。但结果是一样的。

    我的问题是,我是否使用了错误的方法写入数据或我错过的东西?

  • 共有2个答案

    秦珂
    2023-03-14

    NTAG213是错误的标记:您必须购买< code>MifareUltralight标记才能使用该类...https://www . MIFARE . net/WP-content/uploads/2022/05/NXP-RFIDNFC-Portfolio _ May-9-2022 . pdf < br >另请参阅:如何在MIFARE Ultralight EV1标签上设置和取消设置密码?

    裘安阳
    2023-03-14

    是的,您使用了错误的方法编写,Ntag213不是Ultralight C标签(尽管对于某些基本内容,它们确实共享类似的命令)

    因为您希望Android操作系统自动启动URL,所以Ndef消息中的第一个Ndef记录必须是正确类型的Ndef消息。

    在Android上,您不需要自己对Ndef记录和Ndef消息进行编码,也不需要在您尝试使用的协议级别写入Tag,因为Ntag21x系列完全兼容Type 2,您可以使用Ndef类写入它

    可以在 https://stackoverflow.com/a/70943157/2373819 中看到一个例子

    注意 在本例中,您需要处理格式化和未格式化的标记

    也是编写 Ndef 消息的另一个示例 https://stackoverflow.com/a/64921434/2373819

    要创建正确类型的Ndef消息和记录,您可以使用NdefRecord.createUri

     类似资料:
    • 我正在使用此作为参考向pdf添加视觉签名-https://stackoverflow.com/a/27940667/7103795 我能正确地打印细节。但pdf在Acrobat中打开时不会显示绿色勾号,尽管它写着“已签名且所有签名均有效”在签名面板中。 这是我需要的一个例子: 我怎样才能确保有效期标志出现? 我使用的是pdfBox 2.0.1版

    • GetResult get(GetRequest request) 功能 获取某个表的某一行记录,可以返回所有属性或者部分属性 消耗一个单位读配额 方法参数 request : GetRequest : required GetRequest包括以下部分 1.tableName : String : required 指定要读哪一张表 2.keys : Map< String, Datum > :

    • 如何将NDEF消息写入NFC标记?我必须更改清单文件吗?到目前为止,我有生成NDEF消息的代码: 如何发现标签?有人能帮我吗?

    • Vim支持书签功能。 使用这个功能,可以更快地在文件中导航。 在本章中,将讨论以下主体内容 - 创建书签 跳转到书签 列出所有书签 删除书签 局部书签 全局书签 1. 创建书签 要创建书签执行以下命令 - 在上面的示例中,书签名称是单个字母字符。例如,下面的命令创建名称的书签。 2. 跳转到书签 当创建了书签以后,就可以跳到书签那里。 以下命令可用于跳转到指定书签 - 编号 命令 描述 1 `{b

    • Android Studio 书签是什么? 在Android Studio中的书签是指对代码的标记,标记我们阅读的位置.。给代码加上书签, 就可以快速的在不同的书签中切换。 标记书签 前提条件: 光标放到需要标记的位置 操作步骤: 菜单栏: Navigate —> Bookmarks —> Toggle Bookmark 快捷键: Mac: Fn + F3 Windows\/Linux: F11