1

我正在尝试开发一个使用 Android NFC 作为智能卡的应用程序(HCE 模式下的 Android 4.4.2)。我已阅读有关 Android 4.4 上的 HCE 的指南。我将该示例与 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

我读过这个帖子,但我在这方面的知识很少。

4

1 回答 1

1

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

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

为了允许具有阅读器应用程序的第二台设备可以看到 Android HCE 模拟卡,该第二台设备需要禁用其点对点模式功能并仅在读取器/写入器模式下处于活动状态。这就是您所引用的线程(Android:如何更改 NFC 协议优先级?)进来。通过使用阅读器模式 API,更具体地说是带有标志的enableReaderMode方法,(以及可选),您可以强制(阅读器侧面!!!)Android设备仅在读取器/写入器模式下运行并禁用对等模式:NfcAdapterFLAG_READER_NFC_AFLAG_READER_NFC_BFLAG_READER_SKIP_NDEF_CHECK

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“卡”通信。

于 2014-04-01T10:47:01.930 回答