gpt4 book ai didi

android - 使用 NFC-B 卡在 Galaxy S3 上收发失败

转载 作者:行者123 更新时间:2023-11-29 21:40:27 26 4
gpt4 key购买 nike

我正在为 Android 开发一个读取非接触式智能卡的应用程序,但我的 Galaxy S3 遇到了一些问题。在描述问题之前,我需要明确一点,在 PC 上,我可以使用 Java 中的 smartcardio API 和来自不同制造商的 NFC 阅读器与卡完美通信。

此卡被 NFC 堆栈检测为支持技术“IsoDep”和“NfcB”。但是,当我发送带有“transceive”的 apdu 命令时,出现异常“Transceive failed”。我尝试增加超时时间,但没有更好的结果。

iso = IsoDep.get(tag);
if (iso!=null) {
try {
iso.connect();
// txMessage is a TextView object used for debugging purpose
txMessage.setText("Max:"+iso.getMaxTransceiveLength()+" timeout:"+iso.getTimeout()+" connected:"+iso.isConnected());
iso.setTimeout(2000);
txMessage.setText("Max:"+iso.getMaxTransceiveLength()+" timeout:"+iso.getTimeout()+" connected:"+iso.isConnected());
byte[] command = new byte[] {(byte) 0x00, (byte) 0xA4, (byte) 0x04,(byte) 0x00, (byte) 0x06,(byte) 0xA0,(byte) 0x00,(byte) 0x00, (byte) 0x00,(byte) 0x12,(byte) 0x00};
byte[] response = iso.transceive(command);
} catch (IOException e) {
txMessage.setText(txMessage.getText()+"\n"+e.getMessage());
}
}

运行这段代码时,我得到:

Max:261 timeout:309 connected: true
Max:261 timeout:2474 connected: true
Transceive failed

我注意到这张卡需要非常靠近 NFC 天线才能工作。我需要取下手机的额外塑料保护壳(不是后盖),以便检测到卡(我猜是通电的)。

在发帖之前,我已经阅读了NFC typeb card not getting detected by any NFC application (like:nfctaginfo)Android isodep.isConnected() returns false and maximum Transceive length:0 byte ,for type B card.?和其他几个帖子( http://forum.xda-developers.com/showthread.php?t=1705970http://code.google.com/p/android/issues/detail?id=35960 )但我没有找到解决方案。

一种可能的解决方案是尝试与外部天线通信,但我不确定将其连接到哪里?在没有“+”和“-”的电池连接器上?

另一种解决方案是尝试使用 NfcB (NfcB nfcb = NfcB.get(tag);) 与卡通信,但我不知道 ISO14443-3B 协议(protocol)(我只知道很好的 APDU、T0-TPDU 但不是其他 TPDU 协议(protocol))。

可以肯定的是,我已经将我的手机更新到 Android 4.1.2(而不是 4.1.1),但没有更好的结果。

最佳答案

我也有三星 Galaxy S3,我注意到 TypeB 非接触式卡的连接性能比 TypeA 差。提高超时值似乎是解决此类问题的快速方法,但由于它对您不起作用,问题可能出在射频场的强度上。您是否测试过 transceive() 的调用是否因超时或连接丢失而失败?也许您可以尝试进一步提高超时时间,某些操作在智能卡上可能需要很长时间。

针对您的问题的另一个建议是取下 S3 的后盖并将智能卡直接放在电池上(NFC 天线集成在其中)。根据我的经验,芯片在智能卡上的位置略有不同,因此您可以试验卡的方向。您可以通过将卡从设备底部滑到电池上来测试这一点。

在我使用 Galaxy S3 (Android 4.1.1) 的过程中,我能够连接到 TypeA 和 TypeB 非接触式智能卡(德国 eID 卡)并向其收发数据。我注意到TypeB卡在闲置时有时会莫名其妙地丢失。但无论如何我都可以用它发送和接收数据。即使当卡上的芯片必须执行一些计算并因此需要来自 RF 场的稍微更多的功率时,NFC 天线的场似乎足够强大以保持连接。也许您的卡设计不适合低功率 RF 场?遗憾的是,据我所知,无法提高 Android 设备上 NFC 天线的功率输出。

通过 NfcB (NfcB nfcb = NfcB.get(tag);) 进行通信对我来说似乎没有任何区别。我能够通过 IsoDep 对象进行通信并完美地收发数据。

使用外部或附加天线值得一试。 In this YouTube video它展示了如何将额外的 NFC 天线放入 Galaxy S4 中。在视频中,您会注意到 S4 背面的外部天线引脚。在这里观看第三张图片 (Galaxy SIII teardown) - 取出电池的图片 - 您会注意到 SIII 背面还有额外的天线引脚。左侧的两个金色触针。谷歌搜索显示这些引脚名为“ANT500”和“ANT501”,因此它们可能是外部 NFC 天线触点。如果您在 eBay(或任何搜索引擎)上搜索“Samsung Galaxy Note2 外部 NFC 天线”或类似内容,您将获得 YouTube 视频中使用的天线。 SIII 和 S4 都没有官方的外部 NFC 天线,但它可能会起作用。天线不是很贵(目前约为 5 美元),所以您可以试一试。

关于android - 使用 NFC-B 卡在 Galaxy S3 上收发失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17262197/

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