【问题标题】:Android: HCE of 14443 type A cardAndroid:14443 type A卡的HCE
【发布时间】:2014-05-11 00:19:56
【问题描述】:

我正在尝试开发一个使用 Android NFC 作为智能卡的应用程序(HCE 模式下的 Android 4.4.2)。我读过guide about HCE on Android 4.4。我将该示例与 Android 4.4 SDK 一起使用。但是,如果尝试使用 NFC 读取器应用程序从另一个 Android NFC 设备(Android 4.3)读取 HCE 模拟智能卡,我只会看到以下日志:

03-31 17:02:21.151: I/NFC-HCI(600): I'm P2P Active Initiator @ 424 kb/s
03-31 17:02:21.159: D/NFCJNI(600): Discovered P2P Target
03-31 17:02:21.159: D/NfcService(600): LLCP Activation message
03-31 17:02:21.183: I/NFC-HCI(600): I'm P2P Active Initiator @ 424 kb/s
03-31 17:02:21.190: I/NFCJNI(600): LLCP Link activated (LTO=150, MIU=128, OPTION=0x00, WKS=0x13)
03-31 17:02:21.190: I/NfcP2pLinkManager(600): LLCP activated
03-31 17:02:21.190: D/NfcP2pLinkManager(600): onP2pInRange()
[...]
03-31 17:02:22.144: I/NFCJNI(600): LLCP Link deactivated
03-31 17:02:22.144: D/NfcService(600): LLCP Link Deactivated message. Restart polling loop.
03-31 17:02:22.144: I/NfcP2pLinkManager(600): LLCP deactivated.
03-31 17:02:22.144: D/NfcP2pLinkManager(600): Debounce timeout
03-31 17:02:22.151: D/NfcP2pLinkManager(600): onP2pOutOfRange()

如果我尝试读取真正的智能卡,它会按预期工作并且我能够读取卡:

TagID (hex): c4 2a 29 c8
TagID (dec): 3291097544
Technologies: MifareClassic, NfcA,NdefFormatable
Mifare Classic type: Classic
Mifare size: 1024 btes
Mifare sectors: 16
Mifare blocks: 64

我读过this thread,但我在这方面的知识很少。

【问题讨论】:

  • Android 4.4 设备(即模拟的“智能卡”和“阅读器”)也是如此吗?
  • 是的,两者都是设备。一个 Androis 4.3(带有用于读取 nfc 标签的商业应用程序)和用作卡片仿真的是 4.4.2。

标签: android nfc smartcard hce contactless-smartcard


【解决方案1】:

简单的答案:您尝试做的事情是不可能的。

这里的问题是,默认情况下,两台 Android 设备会以点对点模式进行通信(即使其中一台或两台设备都支持主机卡模拟)。一旦 Android 设备在点对点模式下成功通信,它就不会尝试在读/写模式下进行通信。因此,您的带有阅读器应用的设备不会检测到其他设备的 HCE 模拟“卡”。

为了使 Android HCE 模拟卡对具有读取器应用的第二台设备可见,第二台设备需要禁用其对等模式功能,并且仅在读取器/写入器模式下处于活动状态。这就是你引用的线程(Android : How to change NFC protocol priority?)进来。通过使用阅读器模式 API,更具体地说,NfcAdapterenableReaderMode 方法带有标志FLAG_READER_NFC_AFLAG_READER_NFC_B(以及可选的@987654326 @),您可以强制(阅读器端!!!)Android 设备仅在阅读器/写入器模式下运行并禁用点对点模式:

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.enableReaderMode(this, new NfcAdapter.ReaderCallback() {
    public void onTagDiscovered(Tag tag) {
        // TODO: access tag...
    }
},
NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_NFC_B | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK, null);

很遗憾,此 API 仅适用于 Android 4.4 及更高版本。因此,对于 Android 4.3 设备,您无法禁用点对点模式,因此无法与Android HCE“卡片”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2014-04-27
    • 2021-12-22
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多