NFC代码结构

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kriseyu/article/details/53258108

NFC app代码主要的路径存放在:
packages\apps\Nfc 包含以下目录:
Assets:含start.png
etc:nfcee_access签名信息(CE模式权限)
nci:nci规范中的接口和驱动
nxp:nxp芯片对应的接口和驱动
res:app用到的图片,字串资源等
src:主要代码流程
tests:Google提供的部分测试程序
packages\apps\Settings\src\com\android\settings\nfc是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() 等

展开阅读全文

没有更多推荐了,返回首页