- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正尝试在 Android 上使用 HCE 与设备通信。我创建了自己的扩展 HostApduService
类的 NFC 服务,在 AndroidManifest.xml
中声明了 NFC 部分并创建了 apduservice.xml
,其中指定了 AID。
当我在 Nexus4 或 Nexus 5 (4.4.4) 设备上运行我的应用程序时,一切都按预期工作(!),我从设备收到 APDU 数组并发回一个答案,然后继续使用专有协议(protocol)。所以上面的配置部分似乎设置正确。
但是,当我在 Sony Xperia Z2 (4.4.2)、Samsung Galaxy S5 (4.4.2) 或 Motorola 上部署我的应用程序时Moto X (4.4.3) 我在 processCommandApdu()
中的代码甚至没有被调用。该方法的第一行包含一个我根本看不到的日志输出。
根据列表编译here我的设备应该支持 HCE。
当我点击设备前面的(不工作的)电话时,我得到以下日志输出,但我似乎无法找到错误代码的确切含义:
D/STATUSBAR-NetworkController(1085): refreshSignalCluster - setNWBoosterIndicators(false)
D/STATUSBAR-NetworkController(1085): refreshSignalCluster: data=-1 bt=false
D/STATUSBAR-IconMerger(1085): checkOverflow(504), More:false, Req:false Child:6
D/HostEmulationManager(1277): notifyHostEmulationActivated
D/HostEmulationManager(1277): notifyHostEmulationData
D/HostEmulationManager(1277): call findSelectAid - 1
D/HostEmulationManager(1277): Selecting next, last or previous AID occurrence is not supported
D/NfcService(1277): onSeListenDeactivated - Skip this one, user select the onHost apk temporarily
D/HostEmulationManager(1277): notifyHostEmulationDeactivated
E/NfcNfa(1277): UICC/ESE[0x402] is not activated
我在哪里可以找到错误代码 0x402
?
这里是apduservice.xml
:
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/service_desc"
android:requireDeviceUnlock="false">
<aid-group android:description="@string/aid_description"
android:category="other">
<aid-filter android:name="F04B4142413134" />
<aid-filter android:name="F0404B75737469"/>
</aid-group>
</host-apdu-service>
我使用 Nexus 5 收到的 APDU 命令如下所示,在我看来它似乎遵循 APDU 规范来选择应用程序:
output: [00, a4, 04, 00, 07, f0, 4b, 41, 42, 41, 31, 34]
00 -> class
a4 -> instruction select
04 -> P1, select by name
00 -> P2
07 -> length of the following aid
rest -> corresponds to the first aid-filter
奖励问题:
如何在 android 操作系统源代码中设置断点,例如在 HostApduService.java
中?我可以打开文件并查看代码,但设置断点没有任何效果,至少在视觉上它没有显示,而且在 Debug模式下运行时,它不会在那个地方中断。
我猜测当 android 应该选择对应于指定 AID 的应用程序时发生了一些事情。我的问题与 this one 有点相关,但答案与付款有关,这对我帮助不大。
为什么我不能在其他设备上运行它?提前致谢。
最佳答案
与此同时,我找出了问题的根源。按照 Michael Roland 的建议,我试图找出读者发送的 APDU 命令。我用我能拿到的所有安卓手机测试了我的应用程序,发现所有配备 NXP 制造的 NFC Controller 的手机都无法正常工作。
原因是 NXP 芯片发送的随机 ID 不符合我的读者所期望的标准(如 here 所述)。它应该是这样看的:
0x08, A, B, C
其中 A、B 和 C 是随机的。但是 NXP 芯片发送的 ID 是常量
0x1, 0x2, 0x3, 0x4
或者在第一个 0x08 之后有 7 个字节是随机的,而不是只有 3 个字节。
这导致读者发送一个 APDU,它没有让 android 触发调用我的 processCommandApdu()
方法。
关于android - HCE 不适用于 Nexus 5 以外的其他手机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035044/
Kitkat HCE(NFC) 设备可以与另一台 Kitkat HCE(NFC) 设备通信吗? 我想编写应用程序将数据从一台 Kitkat HCE(NFC) 设备传输到另一台 Kitkat HCE(N
我创建了一个 Android 应用程序,它使用 Host Card Emulation 来模拟非接触式智能卡。现在,在真正的智能卡和应用程序都靠近读卡器的情况下,我想用我的 HCE 应用程序完全隐藏智
我一直在开发需要实现触碰付款的应用程序。我能够将 HCE 服务与 NFC 终端连接。 现在我的问题是接下来的步骤是什么,用它进行实际付款? 我到处搜索,但找不到合适的文件。请帮我。 下面是我编写的将
随着越来越多的设备拥有 KitKat,我正在尝试编制支持 HCE 的设备列表。 有人有名单吗?随意添加评论以对此列表做出贡献。 以下是我到目前为止所拥有的: 笔记: 并非所有 KitKat 设备都支持
我正在 Android 上制作 Host Card Emulation 应用程序,在我的 PC/SC 读卡器上一切正常。我能够发送 APDU 命令并获得响应。现在我想知道是否可以使用 Android
我正在开发一个手机钱包应用程序,但我遇到了一个问题,即屏幕锁定时我无法付款。尽管我将手机放在 POS 终端上,但 HostApduService 不起作用。你知道谷歌钱包在没有密码或密码/图案的情况下
我正在尝试使用 ACR122 NFC 阅读器来选择在一个使用 Android 主机卡仿真的 Nexus 5。但是,小型 AID 不是认可。 我的目标是使用三字节长的 AID,就像我在 DESfire
我正在尝试开发一个在 Android (4.4) 上通过 HCE 模拟信用卡的应用程序。我有一个可以从 NFC 标签读取的目标应用程序,我现在希望通过在我的设备上模拟 NFC 来实现相同的结果。该应用
我目前正在为我的 Galaxy s4 开发 HCE 实现。我有一个支持 7816-4 的 Omnikey 5321-cl 阅读器。我的 android 类看起来像这样: public class Nf
我正在对基于 HCE 的支付进行 POC。 我有一部支持 NFC 的手机来运行应用程序,但没有支持 NFC 的读卡器。有什么方法可以模拟读卡器(在 POS 上)? 谢谢,uq 最佳答案 如果您正在开发
每次用户使用基于主机的卡仿真 (HCE) 开始 NFC 交易时,我都需要启动我的应用。 我不需要管理交互。我不需要来自阅读器或 NFC 模拟器的任何类型的数据。我无法控制使用该服务的应用程序。我只需要
我的应用程序的 AID 是 F239856324897348,我已经为它构造了一个 SelectAID APDU。现在我如何将它实际发送到使用主机卡仿真的接收 Android 设备。 我已经创建了我的
我想实现一个可以支持某些类型卡片的应用程序。我想了解以下内容: 我能否使用 HCE 模拟不同类型的卡,例如非接触式支付卡? 我需要什么来实现它? 最佳答案 我可以使用 HCE 模拟不同类型的卡吗? 这
首先,我对编写 Android 应用程序还很陌生。我的编程语言是Java。我在网上搜索了解决方案,问了其他程序员没有解决方案。 情况:我开发了一个使用 HCE 服务的应用程序。此应用程序由另一台设备触
有没有一种方法可以在我的 ADT IDE 中使用模拟器在 Android 4.4 上使用 HCE(主机卡模拟)模拟 NFC 交易?...是否有支持 HCE 的模拟器可用?基本上我想做的是开发一个应用程
我想编写一个可以存储唯一 ID 的程序,然后将其作为 NFC 标签发送到另一个 NFC 读取器设备。如何将我的代码 (nfcTag) 发送到 NFC 阅读器?我可以在没有 AID 的情况下执行此操作吗
我想使用我的 Android 手机作为阅读器与我的 Android HCE(主机卡仿真)应用程序通信。在互联网上,我找到了 ACS Reader(PC Reader) 的示例客户端应用程序代码。相反,
我想用 Android 的 HCE 功能模拟主机卡。为此,我扩展了服务类 HostApduService 并覆盖了以下方法: public byte[] processCommandApdu(byt
Mifare Classic 是最常用的卡,我不明白为什么 HCE(基于主机的卡仿真)只支持 ISO 14443-4,而不支持 Mifare Classic 类型。 因为 NXP 阻止他们使用他们的专
通过引入 HCE,无需安全元件 (SE) 即可模拟卡。因此,没有存储空间来保存模拟卡的应用程序的敏感信息,例如余额、CVV2、PIN 等。 我只想知道android是怎么解决这个问题的?应用的敏感信息
我是一名优秀的程序员,十分优秀!