近距離無(wú)線(xiàn)通信(NFC)是一種簡(jiǎn)單的,非觸控式的互聯(lián)技術(shù),可以讓消費者簡(jiǎn)單直觀(guān)的交換信息,訪(fǎng)問(wèn)內容和服務(wù),在電子消費領(lǐng)域有著(zhù)廣泛的應用。NFC整合非接觸式讀卡器、非接觸式智能卡和點(diǎn)對點(diǎn)(Peer-to-Peer)通信功能,為消費者開(kāi)創(chuàng )全新便捷生活方式。
1.NFC技術(shù)
NFC終端有三種工作模式:
1)主動(dòng)模式,NFC終端作為一個(gè)讀卡器,主動(dòng)發(fā)出自己的射頻場(chǎng)去識別和讀/寫(xiě)別的NFC設備;
2)被動(dòng)模式,NFC終端可以模擬成一個(gè)智能卡被讀寫(xiě),它只能在其它設備發(fā)出的射頻場(chǎng)中被動(dòng)響應;
3)雙向模式,雙方都主動(dòng)發(fā)出射頻場(chǎng)來(lái)建立點(diǎn)對點(diǎn)的通信。
2.Android NFC架構
android系統為了支持NFC功能,允許應用程序讀取標簽中的數據,并以NDEF(NFC Data Exchange Format)消息格式進(jìn)行交互。標簽還可以是另外一個(gè)設備,即NFC設備工作在卡模擬模式。
NFC軟件架構中定義的數據結構:
1)NFC管理器(NFC Manager),提供給應用程序編程接口,作為應用程序訪(fǎng)問(wèn)NFC功能的入口,為了獲取NFC適配器實(shí)例。
2)NFC適配器(NFC Adapter),提供一切NFC操作,包括NFC設備開(kāi)關(guān)、標簽讀取、NDEF數據交互、NFC安全訪(fǎng)問(wèn)、點(diǎn)對點(diǎn)通信等。
3)NDEF消息(NDEF Message),是設備和標簽之間傳遞的數據標準封裝格式,是由一個(gè)或多個(gè)NDEF數據記錄組成,在應用程序中通過(guò)接受ACTION_TAG_DISCOVERED Intent來(lái)讀取NDEF消息。
4)NDEF記錄(NDEF Record),是NDEF數據包的基本組成單元。一個(gè)NDEF數據包可以有一個(gè)或者多個(gè)NDEF記錄。
NFC 在android架構中采用Service和Manager基本結構模型,通過(guò)Binder和Service通信,如圖一所示android基于Binder的IPC的基本模型是基于會(huì )話(huà)的客戶(hù)/服務(wù)器(C/S)架構的。Android使用內核模塊Binder來(lái)中轉各個(gè)進(jìn)程之間的會(huì )話(huà)數據,它是一個(gè)字符驅動(dòng)程序,主要通過(guò)IOCTL與用戶(hù)空間的進(jìn)程交換數據。一次會(huì )話(huà)是在一個(gè)代理Binder對象和服務(wù)Binder對象之間進(jìn)行,可以在同一進(jìn)程也可以在不同進(jìn)程。會(huì )話(huà)是一個(gè)同步操作,由代理Binder對象發(fā)起請求,一直要等到服務(wù)Binder對象將回復傳遞給代理Binder對象才算完成。
3.NFC Adapter的實(shí)現
NFC Adapter主要實(shí)現的功能如下:
1)設備初始化以及開(kāi)關(guān),相關(guān)函數方法:
private static synchronized INfcAdapter setupService()
public boolean enable()
public boolean disable()
2)NDEF消息的讀寫(xiě)和安全管理鏈接,相關(guān)函數方法:
public void setLocalNdefMessage(NdefMessage message)
public NdefMessage getLocalNdefMessage()
public NdefSecureElement createNdefSecureElementConnection()
3)P2P的后臺通信 ,相關(guān)函數方法:
public void enableForegroundNdefPush(Activity activity,NdefMessage message)
public void disableForegroundNdefPush(Activity activity)
這些基本函數都是NFC Binder客戶(hù)端函數,通過(guò)Binder IPC調用Service 對應的函數進(jìn)行通信處理。
4.NFC Server的實(shí)現
NFC Service主要實(shí)現以下功能:
1)Adapter中的Binder客戶(hù)端對應Service函數實(shí)現,包括INfcTag.Stub,INfcAdapter.Stub等;
2)Service狀態(tài)管理的消息處理;
3)Java本地接口(JNI)的Native代碼的訪(fǎng)問(wèn)接口。
5. NFC HAL實(shí)現
NFC HAL(Hardware Abstract Layer)層,包括以下功能:
1)底層RF控制;
2)NFC標簽讀寫(xiě)處理以及標簽模擬;
3)點(diǎn)對點(diǎn)通信;
4)同單總線(xiàn)的SIM卡或者其它安全設施通信;
5)對基于Felica,Mifare和ISO14443的RFID標簽做兼容處理。
6.標簽識別
在標簽識別開(kāi)始前,確認NFC設備使用正常,可獲取NDEF設備。NFC HAL探測到有效距離范圍內有標簽存在,則讀取數據,向NFC Service發(fā)送標簽識別事件,NFC Service 廣播NfcAdapter.ACTION_TAG_DISCOVERED Intent消息,應用程序通過(guò)接受該消息即可獲取標簽數據。
7.NFC簡(jiǎn)單代碼實(shí)現
Manifest文件的權限配置: