2014-03-31 21 views
1

我正在嘗試開發一款使用Android NFC作爲智能卡(HCE模式下的Android 4.4.2)的應用程序。我讀過guide about HCE on Android 4.4。我將這個例子與Android 4.4 SDK一起使用。但是,如果嘗試讀取從另一個Android NFC裝置與NFC閱讀器應用的HCE-模擬的智能卡(安卓4.3),我只看到這些日誌:Android:14443型A卡的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

那麼這兩種設備(即您的模擬「智能卡」和您的「讀者」)Android 4.4設備? –

+0

是兩個設備。一個Androis 4.3(帶有用於讀取nfc標籤的商業應用程序)以及用作Card Emulation的是4.4.2。 – Mitsus

回答

1

簡單的回答:你想要做的是不可能的。

這裏的問題是,默認情況下,兩個Android設備將以點對點模式進行通信(即使其中一個或兩個設備都支持主機卡仿真)。一旦Android設備成功地以點對點模式進行通信,它將不會嘗試以讀取器/寫入器模式進行通信。因此,使用讀卡器應用程序的設備將無法檢測到其他設備的HCE仿真「卡」。

爲了允許Android HCE仿真卡對具有閱讀器應用程序的第二個設備可見,該第二個設備將需要禁用其對等模式功能並且僅在讀取器/寫入器模式下才有效。這是你refereing的線程(Android : How to change NFC protocol priority?)的用武之地。通過使用閱讀器模式API,更具體的NfcAdapter與標誌FLAG_READER_NFC_AFLAG_READER_NFC_B(和可選FLAG_READER_SKIP_NDEF_CHECK)的enableReaderMode方法,你可以強制(讀者側! !)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「卡」進行通信。

相關問題