- 概述
近场通信(Near-field communication,简称NFC)技术可以提供短距离无线连接,实现电子设备间的双向交互通信。NFC技术由RFID(非接触式射频识别)演变而来,但NFC有特定的标准集,确保具有NFC功能的设备的互操作性。
NFC采用电磁耦合感应技术,电磁场频率是13.56MHz,该载波频段是全球无需许可证的波段。发起设备用13.56MHz信号激励天线,产生磁场。通过近场耦合,将能量传递给目标。目标对磁场进行调制,将数据返回给发起设备完成通信。

- 工作模式
被动模式
在被动模式下,仅有一个NFC设备产生射频场(比如读卡器与无源电子标签)。根据天线尺寸与场调制幅度不同,其工作距离可以达到10cm,数据速率支持106kbit/s到848kbit/s。
主动模式
在主动模式下,两个NFC设备均可以产生射频场。相比于被动模式,工作距离可以达到20cm。如果使用PSK(相移键控)调制方式,数据速率可达到6.78Mbit/s。
- 通信模式
NFC支持三种通信模式:
读写模式(NFC reader/writer)
在读写模式下,系统执行非接触式读写功能。该设备读取数据或写入数据到标签或设备中。例如,靠近NFC标签的手机会推送一个信息或检索一个URL并链接到网站在手机中打开。该模式下数据传输不安全。
卡仿真模式(NFC card emulation)
在卡仿真模式下,NFC设备工作类似于标准的非接触式智能卡。仿真智能卡的NFC设备通常处于被动NFC模式,此时的数据传输是安全的。
此种方式下,有一个极大的优点,那就是卡片通过非接触读卡器的 RF 域来供电,即便是寄主设备(如手机)没电也可以工作。
点对点模式(NFC pear to pear)
在点对点模式下,两个内置NFC设备之间可以进行双向数据传输。该模式下数据交换相比其他模式更快,因此可以交换更多的数据。
————————————————

- 标签类型
NFC论坛定义了如下几种标签:

具体详细内容可以购买标准协议进行查看。
- 协议框架

1,设置权限
<uses-permission android:name="android.permission.NFC" />
2,限制Android版本
<uses-sdk android:minSdkVersion="14"/>
3,限制安装的设备 如果不支持nfc不安装
<uses-feature android:name="android.hardware.nfc" android:required="true" />
4,定义可接收nfc 数据的Activity
- 一个完整的android例子
关键代码
http://gitlab.gbcom.com.cn/mps/androidnfc.git


可购买实验物料:
https://item.jd.com/69035769073.html
- NFC数据解析
https://gitee.com/xiaobug/nfcreadandwritedemo
- NFC文本格式解析
编写解析NDEF格式数据的类
不管什么格式的数据本质上都是由一些字节组成的。对于NDEF文本格式来说。这些数据的第1个字节描述了数据的状态,然后若干个字节描述文本的语言编码,最后剩余字节表示文本数据。这些数据格式由NFC Forum的相关规范定义,可以从下面的地址下载相关的规范。
http://www.nfc-forum.org/specs/spec_dashboard
- NDEF文本数据格式

状态字节编码格式

- 判断数据是否为NDEF格式
获取NFC标签中的数据要通过NdefRecord.getPayload方法完成。当然,在处理这些数据之前,最好判断一下NdefRecord对象中存储的是不是NDEF文本格式数据。
判断的标准有如下两个
TNF(类型名格式,Type Name Format)必须是NdefRecord.TNF_WELL_KNOWN。
可变的长度类型必须是NdefRecord.RTD_TEXT。
- 项目实践
- 获取唯一标识
EXTRA_ID = "android.nfc.extra.ID"
byte[] bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
String tagID = bytesToHexString(bytesId);
log("readNFC_ID: " + tagID);
- 写入APP包名
Com.gbcom.mps
这样,将碰到NFC后,先跳到这个 APP;
点击打卡。
nfcHelper.writeNFC_RunApp
















