我正在尝试开发一款使用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,但我在这方面的知识很少。
答案 0 :(得分:1)
简单回答:你想做的事情是不可能的。
这里的问题是默认情况下两个Android设备将以对等模式进行通信(即使一个或两个设备支持主机卡仿真)。一旦Android设备以对等模式成功通信,它将不会尝试以读取器/写入器模式进行通信。因此,带有阅读器应用程序的设备将无法检测到其他设备的HCE模拟“卡”。
为了允许使用阅读器应用程序对第二个设备显示Android HCE仿真卡,该第二个设备需要禁用其对等模式功能,并且仅在读取器/写入器模式下处于活动状态。这就是你所引用的主题(Android : How to change NFC protocol priority?)。通过使用阅读器模式API,更具体地说enableReaderMode
NfcAdapter
方法带有标志FLAG_READER_NFC_A
, FLAG_READER_NFC_B
(以及可选FLAG_READER_SKIP_NDEF_CHECK
),您可以强制(读取方!!!)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“卡”。