gpt4 book ai didi

Android NfcV 获取信息命令只返回一个字节

转载 作者:搜寻专家 更新时间:2023-11-01 07:49:34 26 4
gpt4 key购买 nike

我正在编写一个应用程序来读取 NFC 标签的二进制信息。下面是 NFC Intent 处理函数的代码:

protected void onNewIntent(@NonNull Intent intent)
{
try
{
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NfcV nfcV = NfcV.get(tag);
byte[] cmdInfo = new byte[]{(byte) 0x02, (byte) 0x2b}; // 'Get info' command
byte[] answer = nfcV.transceive(cmdInfo); // Read info from tag.

...
}
catch(IOException e)
{
...
}
}

如果我运行此函数读取三星 S3 Neo 上的 NFC 标签,一切正常,answer 变量填充了预期数据:

00 04 4B A0 14 01 00 A0 07 E0 F3 07

但是,如果我在华为 P8lite 上运行相同的函数读取相同的 NFC 标签,答案变量将只填充一个字节:

03

如果出现错误,ISO 15693-3 标准说我应该收到类似的东西

01 03

即至少两个字节,其中第二个字节是错误代码。所以我实际得到的答案在理论上是不可能的。

我做错了什么?它取决于移动硬件吗?我该如何解决?

最佳答案

因为您没有使用寻址命令(未设置 Address_flag,请求中没有 UID 字段)。如果标签不支持可选命令(甚至不是错误代码),您根本不会收到任何回复。因此,根据标准,您不应收到 0301 03

请注意,Android 设备中的 NFC 芯片组在涉及 ISO/IEC 15693 时通常存在局限性,并且不支持完整的标准。例如,已知某些芯片组存在非寻址命令问题。您可以通过使用命令的寻址版本来解决这个问题:

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NfcV nfcV = NfcV.get(tag);
byte[] cmdInfo = new byte[]{
(byte)0x20,
(byte)0x2B,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00 };
System.arraycopy(tag.getId(), 0, cmdInfo, 2, 8);
byte[] answer = nfcV.transceive(cmdInfo);

您可能还想用 Data_rate_flag 的不同设置进行测试,因为您设备上的 NFC 芯片组可能存在 VICC 以高数据速率响应的问题。

关于Android NfcV 获取信息命令只返回一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36951077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com