1、寫在前面的話
近來因爲項目需求須要搞Nfc這一塊,以前在上家公司帶LC(本地鏈接)組時也接觸過一些Nfc,在Android系統中也解過一些bug,可是不夠系統,如今正比如較系統的學習Nfc。
2、Nfc的代碼框架
1.框架簡圖
App
|
Framework
|
hal
|
nxp/nci庫
|
Driver
|
Chip
2.代碼目錄和成果物
1)packages/apps/Settings
packages/apps/Settings/src/com/android/settings/Settings.java
packages/apps/Settings/src/com/android/settings/nfc/*
編譯成果物:Settings.apk
主要用於用戶交互:開啓/關閉 nfc和androidBeam
2)packages/apps/Tag
packages/apps/Tag/*
編譯成果物:Tag.apk
主要用於讀取Tag信息時的處理,如讀取mms信息後啓動mms應用。
2)packages/app/Nfc
packages/apps/Nfc/*
編譯成果物:Nfc.apk libnfc_jni.so
該目錄下分nci和nxp分別表明兩個chip vender。
3)frameworks/base/core/java/android/nfc
frameworks/base/core/java/android/nfc/*
編譯成果物:framewrok.jar
4)external/libnfc-nxp
external/libnfc-nxp/*
external/libnfc-nci/*
編譯成果物:libnfc.so libnfc_ndef.so
3.實現邏輯
1)系統啓動時,ActivityManagerService會啓動Nfc.apk(系統級應用)NfcApplication.java,onCreate()時構造NfcService實例,在構造函數中註冊NfcAdapterService binder服務:
ServiceManager.addService(SERVICE_NAME, mNfcAdapter)
能夠經過binder機制獲取服務。
2)NfcManager實例化:
ContexImpl.java
static {
...
registerService(NFC_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
return new NfcManager(ctx);
}});
...
}
3)關鍵類
—— -> NativeNfcManager Nfc設備接口
| -> NfcAdapterService(給上層應用的接口)
| -> P2pLinkManager -> P2pEventManager(監聽p2p連接事件) -> SendUi(Android Beam/HandOver功能在兩個Nfc設備之間共享數據如:聯繫人、URL、圖片、音視頻文件等)
| -> NdefPushServer
| -> SnepServer 這三個Server用於開啓Android Beam功能時啓動的監聽線程
NfcService(服務管理類) | -> HandoverServer
| -> NfcDispatcher 處理Nfc事件如讀取Tag信息後啓動相應的app
| -> CardEmulationService 卡模擬功能
| -> HostEmulationManager Kitkat新增的類實現手機「效仿」物理磁卡(HCE)進行支付的功能
| -> NativeNfcSecureElement 安全認證單元
——
3、Android 4.4 Kitkat新特性
一、KitKat 加強了 NFC 功能,儘管 NFC 功能遭到一些反對或者運營商的排斥,可是谷歌對 NFC 一直抱有美好的願景。新的 NFC 將具有「效仿」物理磁卡(HCE)進行支付的功能,可經過加密方式讓手機直接模擬信用卡、會員卡等磁卡,直接進行交易支付,無需任何安全控件和繁雜的步驟。
待續...java