我想将从 NFC 阅读器获得的 APDU 路由到 SIM 卡。根据HCE 文档,我认为只需使用相应的路由条目创建一个 OffHostApduService (我做了)就可以了。
遗憾的是,SIM 卡似乎没有获得任何 APDU。当 SIM 通过 SIM 读卡器直接连接到我的工作站时起作用的 SELECT 命令返回 6a82(找不到文件)。
在 LogCat 中,我发现了两条有趣的信息:
每次我发出一个应该路由到 SIM 卡的选择命令时,我都会得到以下条目:
01-14 10:44:18.501: D/BrcmNfcJni(1009): RoutingManager::stackCallback: event=0x17
01-14 10:44:18.501: D/BrcmNfcJni(1009): RoutingManager::stackCallback: NFA_CE_DATA_EVT; h=0x302; data len=12
01-14 10:44:18.501: D/HostEmulationManager(1009): notifyHostEmulationData
我认为这是路由设置不正确的线索,因为我认为 Android 操作系统不应该知道何时路由到 SIM 卡是活动的,并且选择或其他命令被发送到 SIM 卡。
每次我从阅读器的 NFC 区域中取出手机时,都会收到以下错误:
01-14 10:46:48.791: E/BrcmNfcNfa(1009): UICC[0x0] is not activated
我试图追踪此错误的原因并找到external/libnfc-nci/src/nfa/ce/nfa_ce_act.chere
似乎属于 Broadcom NFC 驱动程序的文件。
我认为错误在于应用程序无法为 APDU 设置正确的路由,因为驱动程序认为 SIM 未激活。在我发送命令的那一刻,SIM 被解锁(PIN 输入),但我怀疑这与它有什么关系,因为在读卡器中使用它之前我不必解锁 SIM。
我使用 Nexus 5 进行测试。有没有人有经验和/或工作示例可以将 APDU 路由到 SIM 而不是 CPU?