我写这封信是为了回答我的这个问题,这个问题已经成功地解决了:How to substitute NfcAdapter.CreateNdefMessageCallback since android API level 29?
我正在使用Type 4 Tag Operations和AdpuHostService将NdefMessage从一台Android设备发送到另一台设备。在Android 11版本(即API级别30)下一切正常。但由于客户端将设备从Android 11更新到Android 13(API级别33),它不再工作。
我试着调试,发现这部分好像有问题:
ProcessCommandApdu | incoming commandApdu: 00A4040007D276000085010100
C_APDU_SELECT | response: 9000
ProcessCommandApdu | incoming commandApdu: 00A4000C02E103
C_APDU_CAPABILITY_CONTAINER_SELECT | response: 9000
ProcessCommandApdu | incoming commandApdu: 00B000000F
C_APDU_READ_CAPABILITY_CONTAINER | response: 000F20FFFFFFFF0406E104FFFE00FF9000
OnDeactivated | reason: LinkLoss
1.选择apdu命令-确定
1.选择CC apdu命令- OK
1.读取CC文件命令-结果正常,但之后链接丢失
在我看来,nfc阅读器不知道该如何处理下面的响应,然后断开连接:
00 0 F 20英尺英尺英尺英尺英尺英尺04 06 E1 04英尺英尺英尺00 00 90 00
但是响应认为official documentation完全没问题。可能是什么问题?有没有办法调试nfc阅读器设备上接收到的adpu响应的处理?
**来自文档:**预期响应:
00 0F 20 00 3B 00 34 04 06 E1 04 00 32 00 00 90 00
你知道出了什么问题吗?
更新日期:
到目前为止,我发现当我在CC文件中设置的最大. ndef文件大小为7 FFFh(即32767字节)它的工作。但在文档中有写的ndef文件大小值是有效的之间:0005 h到FFFEh。第一字节(7 F)的值似乎不是没有原因的,只是大约半个字节(127)。
但我不知道为什么会这样,所以总结一下,当我发送这个回复时,它工作得很好:
00 0 F 20 00 3B 00 34 04 06 E1 047 F地面以下00 00 90 00
2条答案
按热度按时间pu3pd22g1#
在您链接到www.example.com部分底部的问题中的Type 4 Tag documentation中5.1.2.1,它表示
NDEF文件的最大大小受ReadBinary和NDEF更新C-APDU的Offset和Length Le字段限制(见表16、表17、表22和表23)。NDEF文件的最大大小降至7 FFFh + FFh = 80 FEh字节。
所以Android可能已经修复了一个bug,以匹配规范中定义的最大NDEF文件大小。
dw1jzc5e2#
解决方案是将r-APDU从:
00 11 20英尺英尺英尺英尺英尺英尺04 06 E1 04英尺英尺英尺00 00 90 00
致:
000 F2000 3B 00 3404 06 E1 047 F消防车00 00 90 00
虽然我无法解释原因,但第一个r-apdu在Android 11上运行良好。第二个r-apdu在Android 12和13上运行良好。此解决方案的唯一限制是ndef文件的最大可能大小不是:
FFFEh -〉65534字节
但是:
7 FFFh-〉32767字节
因此,对于较大的数据,需要某种定制的分组系统。