- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 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=1705970 , http://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/
这个问题在这里已经有了答案: Why don't Java's +=, -=, *=, /= compound assignment operators require casting? (11 个
我搜索了很多,但没有一个链接能帮助我解决这个问题。我得到了 ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s
我正在做 RegexOne 正则表达式教程,它有一个 question关于编写正则表达式以删除不必要的空格。 教程中提供的解决方案是 We can just skip all the starting
([\s\S]+|\s?) 中 |\s? 的目的或作用是什么?如果没有它,表达式会不会与 ([\s\S]+) 相同? 最佳答案 这不是完全相同的。 ([\s\S]+|\s?) 会匹配空字符串,而 ([
这个正则表达式有一组还是两组? 我正在尝试使用第二组访问 bookTitle 但出现错误: Pattern pattern = Pattern.compile("^\\s*(.*?)\\s+-\\s+
在 C 中给定一个字符串指针 s,下面的迭代会做什么?即它以什么方式遍历字符串? for (++s ; *s; ++s); 最佳答案 for (++s ; *s;++s) 表示 将指针 s 递增到字符
我正在用一个 node.js 应用程序解析一个大列表并有这段代码 sizeCode = dbfr.CN_DESC.split('\s+-\s*|\s*-\s+') 这似乎不起作用,因为它返回了 [ '
我正在编写一个简单的字符串连接程序。 该程序按照我发布的方式运行。但是,我首先使用以下代码编写它来查找字符串的结尾: while (*s++) ; 但是,这个方法并没有奏效。我传递给它的字符串
这个问题已经有答案了: What does (?和aramchand来自Mohandas Karamchand G 因此,在使用这些匹配来分割字符串后,您最终会得到 {"M", "K", "G"} 注
我正在尝试转换 Map到 List使用 lambda。 本质上,我想将键和值与 '=' 连接起来之间。这看起来微不足道,但我找不到如何去做。 例如 Map map = new HashMap<>();
我正在经历 K & R,并且在递增指针时遇到困难。练习 5.3(第 107 页)要求您使用指针编写一个 strcat 函数。 在伪代码中,该函数执行以下操作: 将 2 个字符串作为输入。 找到字符串
在下面的代码中,pS 和 s.pS 在最后一行是否保证相等?也就是说,在语句S s = S();中,是否可以确定不会构造一个临时的S? #include using namespace std; s
演示示例代码: public void ReverseString(char[] s) { for(int i = 0, j = s.Length-1; i < j; i++, j--){
我一直在寻找类似于 .NET examples 中的示例的 PowerShell 脚本.取一个 New-TimeSpan 并显示为 1 天 2 小时 3 分钟 4 秒。排除其零的地方,在需要的地方添加
def func(s): s = s + " is corrected" return s string_list = ["She", "He"] for s in string_li
我是 python 的新手。当我在互联网上搜索 lambda 时。我在 lambda_functions 中找到了这个声明. processFunc = collapse and (lambda s:
我最近开始学习正则表达式,并试图为上面的问题写一个正则表达式。如果限制只放在一个字母上(例如不超过 2 个“b”),这并不困难。 那么答案就是:a* c*(b|ε)a* c*(b|ε)a* c* 但是
当我运行 npm install 时出现以下错误,但我无法修复它。 我试过:npm install -g windows-build-tools 也没有修复这个错误 ERR! configure
有很多有趣的haskell网上可以找到片段。 This post可以在 this (awesome) Stack Overflow question 下找到. The author写道: discou
我知道以下三行代码旨在将字符串提取到$ value中并将其存储在$ header中。但是我不知道$value =~ s/^\s+//;和$value =~ s/\s+$//;之间有什么区别。 $val
我是一名优秀的程序员,十分优秀!