首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓响应PN532 InListPassiveTarget

安卓响应PN532 InListPassiveTarget
EN

Stack Overflow用户
提问于 2016-05-13 15:27:41
回答 1查看 1.7K关注 0票数 5

我遇到了一种奇怪的情况,我试图在标记模拟和标记读取器模式之间切换我的PN532。读取器要70 and,标签仿真要运行600 and。

我想要发生的是,当我把我的Android设备放在天线附近时,它会读取模拟标签。当我将NFC标记保存到PN532时,它应该读取该标记。

我的解决方案有点奏效,但我看到了一种奇怪的情况,当我调用readPassiveTargetID来测试是否存在被动标记时,Android就会做出响应。这很好,但我认为Android正在推出一种服务,阻止它读取模拟标签。

在测试这一点时,设备有时根本不与PN532通信,但当它们这样做时,最常见的是读取器模式。这是发生这种情况时得到的输出:

Nexus 5x (Android 6):

代码语言:javascript
复制
<< 4A 1 0
>> 4B 1 1 0 4 60 4 1 2 3 4 5 78 80 71 0

Galaxy S4 (Android5.0.1):

代码语言:javascript
复制
<< 4A 1 0
>> 4B 1 1 0 4 20 4 8 87 F6 62 5 78 B3 70 2

5x通常会在一秒钟左右之后读取模拟的标记,但是当我在这两种模式之间切换时,S4很少读取标记。当我只是运行标记仿真时,两个设备都完美无缺地工作。

我在想我正在做的事情可能有一些问题。

  1. 我需要做一些特殊的事情来切换模式吗?当我切换时,我实际上不会重置或重新初始化PN532。
  2. 我是否可以发送命令来告诉设备停止侦听,或者我可以发送一个设置来修复这个问题?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-22 09:32:24

我的解决方案有点奏效,但我看到了一种奇怪的情况,当我调用readPassiveTargetID (InListPassiveTarget)安卓系统时,会出现这样的情况。

这不是一种奇怪的情况,但当您尝试从任何ISO/IEC 14443A读取器访问NFC设备时,这是意料之中的事情。NFC设备通常支持

  • 读取器/写入模式(即它轮询被动标记),
  • 对等模式(即轮询和侦听其他对等模式目标),以及
  • (有时)卡片模拟模式(即,它侦听其他读取器/写入器设备的激活)。

当NFC设备轮询标记时,这通常类似于InListPassiveTarget所做的工作,其不同之处在于它通常会测试各种不同的标记技术(NFC= ISO/IEC 14443A、NFC= ISO/IEC 14443B、NFC=JISX6319-4和NFC= ISO/IEC 15693)。由于被动对等模式基于ISO/IEC 14443A和JIS X 6319-4,它还将通过对NFC-A和NFC-F的测试自动发现被动对等目标。此外,它还将测试其他对等设备(ISO/IEC 18092活动模式).

当NFC设备侦听其他设备(对等或读取器/写入模式)的激活时,它将允许使用ISO/IEC 18092中定义的各种选项进行激活。由于这些子协议是基于NFC-A和NFC的,因此支持被动对等模式和卡模拟模式的NFC设备通常会将两种模式的侦听“阶段”合并成一个可激活的目标。

这正是你所看到的:一个支持ISO/IEC 14443A和ISO/IEC 18092无源模式的设备。这两种协议都采用了ISO/IEC 14443A的防碰撞和选择程序。为了简化发现,NFC设备将卡片模拟模式和点对点模式结合到一个可见目标(即一个带有一个UID的“卡片”)中。

您可以从激活期间收到的参数值(特别是SAK/SEL_RES字节)中清楚地看到这一点。此字节为Nexus5X的0x60,这表明该目标支持具有位5集的ISO/IEC 14443-4 (类型A),以及支持在106 This和bit 6集下的ISO/IEC 18092无源。

请注意,三星在他们的银河S4决定不宣布点对点模式支持在S4字节(0x20),可能是由于一些信用卡支付终端的问题。

这很好,但我认为Android正在推出一种服务,阻止它读取模拟标签。

实际上,这并不是一项不断发展的服务,而是Android有意引入一个超时。一旦Android设备在点对点或卡模拟模式下被激活,在外部阅读器关闭其HF字段后,Android设备将等待大约4秒,然后重新开始对标记的轮询。这至少是我们用libnfc为Nexus设备测量的。三星以广泛修改NFC栈实现而闻名(通常会引入许多额外的bug(特性?)),因此这在S4上可能略有不同。

我需要做一些特殊的事情来切换模式吗?当我切换时,我实际上不会重置或重新初始化PN532。

你可能在做你该做的事。这是一个故意的超时(4秒后,字段关闭)在Android方面,导致您的经验。

我是否可以发送命令来告诉设备停止侦听,或者我可以发送一个设置来修复这个问题?

不幸的是,这通常并不容易。你可以做几件事:

  • 你真的需要Android手机上的读写器模式吗?如果您可以使用主机卡模拟(HCE)在Android端实现所需的所有功能,则可以实现您的PN532端只在读取器/写入器模式下操作。这将消除两种模式之间的切换,并且不再受超时的影响。不幸的是,这将限制您使用支持Android (Android和某些更新的4.4+芯片组)的设备。此外,如果缺少应用程序(通过,AAR),则无法自动安装该应用程序。不过,当读者与您的HCE服务通信时,您仍然可以启动应用程序的活动(参见How can I send message from HostApduService to an activity?)。
  • 您可以将PN532处于卡模拟模式的时间增加到~5秒(一些值明显大于上面提到的超时)。那么Android应该(相当)可靠地检测模拟标记,即使它是在卡片模拟模式/作为被动对等模式目标激活的。不幸的是,在PN532能够检测到被动标记之前等待5秒钟,对于PN532应该读取NFC标记/非接触式智能卡的用户体验来说,通常是不可接受的。
  • 如果您的应用程序只需要在应用程序的活动处于前台时能够与PN532通信(即当用户尝试与PN532侧交互之前手动打开应用程序时),则可以使用阅读器模式API禁用P2P模式(参见NfcAdapter.enableReaderMode() )。这再次将您限制在运行Android 4.4+的设备上(尽管所有NFC芯片组都支持)。我怀疑这对安卓方面使用HCE是否有很大好处,因为当用户试图用手机点击an 532端以便自动打开应用程序或安装应用程序(通过AAR)时,问题就出现了。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37213889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档