我通过带有日志控制台的计算机在Card Emulation模式下运行SpringCard.
一旦我使用带有NFC的Android手机(API 4.1.2)进行检查(没有应用程序运行),我的手机会将这些数据发送到模拟卡:
1st set -> 90:60:00:00:00 2nd set -> 00:A4:04:00:07:D2:76:00:00:85:1:1:0
这些命令究竟是什么?它们与我的Android有关,它试图发现仿真卡使用的技术吗?
编辑
其实我已经明白了第二套是什么(APDU SELECT).
但似乎第一组是来自Android的专有APDU命令.这可能与NPP(NDEF推送协议)有关吗?
这些命令是什么?
第一个command(90 60 00 00 00
)是MIFARE DESFire GetVersion命令(包装命令集).这似乎是特定于基于恩智浦的NFC NFC堆栈,并不是典型NFC标签检测程序的一部分.
第二个command(00 A4 04 00 07 D2 76 00 00 85 01 01 00
)是一个SELECT APDU,它试图通过AID选择NFC Forum Type 4标签应用程序(版本2.0).这是基于ISO 14443-4(ISO-DEP)的标签/智能卡的典型标签检测程序的一部分.
为什么在应用程序收到有关标记存在的通知之前发送这些命令,即使没有应用程序处于活动状态?
典型的NFC设备将自动发现包含NDEF消息的NFC标签的存在.通常这样的NDEF消息然后触发设备上的动作(例如,启动应用程序).由于您的标签似乎是符合ISO 14443-4(ISO-DEP)标签/智能卡,因此启动了NFC论坛类型4标签的NDEF发现程序.此过程通常包含以下步骤:
选择NFC论坛类型4标签应用程序(版本2.0)
00 A4 04 00 07 D2 76 00 00 85 01 01 00
如果应用程序选择成功,请继续阅读功能容器文件和NDEF数据文件.
如果应用程序选择失败,请继续选择NFC论坛类型4标签应用程序(版本1.0)
00 A4 04 00 07 D2 76 00 00 85 01 00 00
如果应用程序选择成功,请继续阅读功能容器文件和NDEF数据文件.
如果应用程序选择失败,则标记不是NFC论坛类型4标记.
通常,此时将重置与标记的连接,以便在标记的新激活之后立即启动应用程序对标记执行的任何通信.
步骤1之前的附加命令表明NXP的NFC堆栈还试图找出Type 4标签是否是NXP产品(NXP的MIFARE DESFire或DESFIRE EV1).它不涉及到对等网络模式协议.
备注Broadcom NFC堆栈: Android 4.4上似乎仍然存在一个已知问题:即使将标签传递给应用程序并且应用程序启动了IsoDep通信,NFC堆栈也会随意发送与应用程序通信交错的READ BINARY命令.由于无效的命令序列,这经常导致协议错误.这并不会与恩智浦的NFC堆栈发生.
我可以阻止标签的初始处理吗?
是的,但仅限Android 4.4.在该平台上,您可以使用NfcAdapter的enableReaderMode方法将设备置于读取器模式而无需NDEF发现.