NFC app代码主要的路径存放在:
packagesappsNfc 包含以下目录:
Assets:含start.png
etc:nfcee_access签名信息(CE模式权限)
nci:nci规范中的接口和驱动
nxp:nxp芯片对应的接口和驱动
res:app用到的图片,字串资源等
src:主要代码流程
tests:Google提供的部分测试程序
packagesappsSettingssrccomandroidsettings
fc是Setting中关于NFC的代码
上层APP主要通过调用android.nfc.tech及android.nfc的接口来 实现期望的功能;而android.nfc.tech和android.nfc透过AIDL的方式调用到NfcService中的接口。 Framework中NfcService透过JNI与底层NFC Driver进行沟通,实现发送命令和接收event功能
1、/packages/app/Nfc/AndroidManifest.xml中设置了android:persistent=”true”。所以在 AM(ActivityManager)启动后,AM会启动NFC service.这个时候进入NFC service的启动流程
devices平台相关
hardware设备厂家提供的hardware lib
external 目录下是 NCI based NFC stack implementation,注意 halimpl 这个三级目 录中的 pn54x 下是 HAL 层的接口
external/libnfc-nci 将会在 /system/lib 下生成 libnfc_nci.so,将在 /system/lib/hw 下生成 nfc_nci_pn54x.default.so
frameworks 目录下是 NFC 接口和公用的 API。
frameworks/base/core/java/android/nfc 及frameworks/base/core/java/com/nxp/nfc 将会生成 /system/framework/ 下 framework.jar 的一部分
NFC 三种运行模式
R/W运行模式:含NFC芯片终端和NFC Tag交互
P2P运行模式:两台支持NFC设备交互
NFC Card Emulations模式:将含NFC设备模拟成Smart Card
android.nfc 和android.nfc.tech 为API接口
android.nfc包中包含四个主要类
NfcManager类:可以用来管理Android设备中指出的所有NFC Adapter,但 由于 大部分Android设备只支持一个NFC Adapter,可以直接使用 getDefaultAapater方法来获取系统支持的Adapter。
NfcAdapter类:本设备的NFC adapter,可以定义Intent来请求将系统检测到tags的 提醒发送到你的Activity,并提供方法去注册前台tag提醒发布和前台NDEF 推送。
NdefMessage类:NDEF是NFC论坛定义的数据结构,用来有效的存数据到标签 中,如文本,URL,和其他MIME类型。一个NdefMessage扮演一个容器, 这个容器存哪些发送和读到的数据。一个NdefMessage对象包含0或多个 N defRecord,每个NDEF record有一个类型,比如文本,URL,智慧型海报/ 广告,或其他MIME数据。在 NDEFMessage里的第一个NfcRecord的类型 用来发送tag到一个android设备上的activity。
Tag类:标示一个被动的NFC目标,比如tag,card,钥匙挂扣,甚至是一个电话 模拟的的NFC卡。可提供对标签的各种操作方法。
android.nfc.tech包中包含那些对tag查询属性和进行I/O操作的类TagTechnology NfcA、NfcB、NfcF、NfcV、IsoDep、Ndef、NdefFormatable、MifareClassic、MifareUltralight
NFC系统模块核心为NfcService及重要成员
NfcService的构造函数中创建
Tagservice() NfcAdapterservice() NfcAdapterExtrasService()
NativeNfcManager() HandoverManager() NfcDispatcher()
P2pLinkManager() 等