近期由于项目需求,对Android NFC 技术进行了一定的了解和深入,整合了一些网络、书籍资料,此文章仅作为自己的学习笔记。源码请看文末
提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。NFC技术允许电子设备之间进行非接触式点对点数据传输,在十厘米(3.9英吋)内,交换数据,其传输速度有106Kbit/秒、212Kbit/秒或者424Kbit/秒三种。接下来我们更加详细的来了解一下nfc的应用。

    NFC工作模式主要有三种工作模式,分别是卡模式[Android](Card emulation)Beam。所以使用(http://lib.csdn.net/base/android)[android]Beam传输数据的两部设备不再限于4厘米之内。复制代码
     不同的NFC标签之间差异很大,有的只支持简单的读写操作,有时还会采用支持一次性写入的芯片,将NFC标签设计成只读的。当然,也存在一些复杂的NFC标签,例如,有一些NFC标签可以通过硬件加密的方式限制对某一区域的访问。还有一些标签自带操作环境,允许NFC设备与这些标签进行更复杂的交互。这些标签中的数据也会采用不同的格式。但Android SDK API主要支持NFC论坛标准(Forum Standard),这种标准被称为NDEF(NFC Data Exchange Format,NFC数据交换格式)。
复制代码

NDEF格式其实就类似于硬盘的NTFS,下面我们看一下NDEF数据:

(1)NDEF数据的操作Android SDK API支持如下3种NDEF数据的操作:

1)从NFC标签读取NDEF格式的数据。
2)向NFC标签写入NDEF格式的数据。
3)通过Android Beam技术将NDEF数据发送到另一部NFC设备。
用于描述NDEF格式数据的两个类:
1)NdefMessage:描述NDEF格式的信息,实际上我们写入NFC标签的就是NdefMessage对象。
2)NdefRecord:描述NDEF信息的一个信息段,一个NdefMessage可能包含一个或者多个NdefRecord。
NdefMessage和NdefRecord是Android NFC技术的核心类,无论读写NDEF格式的NFC标签,还是通过Android Beam技术传递Ndef格式的数据,都需要这两个类。

(2)非NDEF数据的操作对于某些特殊需求,可能要存任意的数据,对于这些数据,我们就需要自定义格式。这些数据格式实际上就是普通的字节流,至于字节流中的数据代表什么,就由开发人员自己定义了。

(3)编写NFC程序的基本步骤1)设置权限,限制Android版本、安装的设备:

2)定义可接收Tag的Activity,配置一下launchMode属性:

三、实战使用NFC标签### (1)利用NFC标签让Android自动运行程序场景是这样的:现将应用程序的包写到NFC程序上,然后我们将NFC标签靠近Android手机,手机就会自动运行包所对应的程序,这个是NFC比较基本的一个应用。下面以贴近标签自动运行Android自带的“短信”为例。

向NFC标签写入数据一般分为三步:
1)获取Tag对象

2)判断NFC标签的数据类型(通过Ndef.get方法)
3)写入数据

实际运行效果如下:

操作步骤:
点击自动打开短信界面或百度页面,进入对应Activity,将NFC标签贴近手机背面,提示写入成功。返回主界面,再将NFC标签贴近手机背面,便能看到自动打开短信或者打开百度页面。

四、NDEF文本格式深度解析

获取NFC标签中的数据要通过 NdefRecord.getPayload 方法完成。当然,在处理这些数据之前,最好判断一下NdefRecord对象中存储的是不是NDEF文本格式数据。

(1)判断数据是否为NDEF格式1)TNF(类型名格式,Type Name Format)必须是NdefRecord.TNF_WELL_KNOWN。

2)可变的长度类型必须是NdefRecord.RTD_TEXT。
如果这两个标准同时满足,那么就为NDEF格式。

(2)NDEF文本格式规范不管什么格式的数据本质上都是由一些字节组成的。对于NDEF文本格式来说,这些数据的第1个字节描述了数据的状态,然后若干个字节描述文本的语言编码,最后剩余字节表示文本数据。这些数据格式由NFC Forum的相关规范定义,可以通过 http://members.nfc-forum.org/specs/spec_dashboard 下载相关的规范。

下面这两张表是规范中 3.2节 相对重要的翻译部分:

实现NFC标签中的文本数据的读写操作:

  点击写NFC标签中的文本数据,跳转到对应的Activity,将NFC标签卡贴近手机,写入成功后会提示,再退回主页面,选择读文本数据,便可读取。复制代码

五、NDEF Uri格式存储(操作步骤如上图,具体实现可查阅项目代码)
六、非NDEF格式(操作步骤如上图,具体实现查阅项目代码)

    MifareUltralight数据格式:将NFC标签的存储区域分为16个页,每一个页可以存储4个字节,一个可存储64个字节(512位)。页码从0开始(0至15)。前4页(0至3)存储了NFC标签相关的信息(如NFC标签的序列号、控制位等)。从第5页开始存储实际的数据(4至15页)。使用MifareUltralight.get方法获取MifareUltralight对象,然后调用MifareUltralight.connect方法进行连接,并使用MifareUltralight.writePage方法每次写入1页(4个字节)。也可以使用MifareUltralight.readPages方法每次连续读取4页。如果读取的页的序号超过15,则从头开始读。例如,从第15页(序号为14)开始读。readPages方法会读取14、15、0、1页的数据。复制代码

+qq群457848807:。获取以上高清技术思维图相关技术的免费视频学习资料以及源码。

Android NFC技术解析,附Demo源码相关推荐

  1. 微信小程序开发之文件上传下载应用场景(附Demo源码)

    微信小程序开发之文件上传下载应用场景(附Demo源码),Demo为小相册应用,源码在附件中,本示例需要腾讯云支持. http://www.henkuai.com/forum.php?mod=viewt ...

  2. 最新小程序授权+php后端(附demo源码)

    参考博客:小程序授权+php后端(附demo源码)_流情的博客-CSDN博客_php小程序 正所谓计划永远赶不上变化,鉴于小程序端已经更改了微信授权登录的接口,因此特来补充一下.原先的wx.getUs ...

  3. echarts圆柱形柱状图 源码_jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】...

    jQuery插件echarts实现的多柱子柱状图效果示例[附demo源码下载] 发布时间:2020-09-08 07:46:02 来源:脚本之家 阅读:74 作者:翱翔天地 本文实例讲述了jQuery ...

  4. winserver的consul部署实践与.net core客户端使用(附demo源码)

    前言 随着微服务兴起,服务的管理显得极其重要.都知道微服务就是"拆",把臃肿的单块应用,拆分成多个轻量级的服务,每个服务可以在短周期内重构.迭代.交付.随着微服务的数量增多,因量变 ...

  5. 【Kotlin】Android-使用WebDAV协议云存储文件(详细)—附demo源码

    比起云服务器.云数据库.云存储等等方式将文件存储至云端,网盘的WebDAV协议对新手就友好的多,不仅仅有免部署.使用方式简单等等原因,更重要是免费,国内首推坚果云网盘! 三个注意点: 使用第三方库Sa ...

  6. 分享基于白鹭Egret联合Matchvs开发的足球游戏(附Demo源码)

    Demo简介 本游戏使用Matchvs的实时联网SDK和白鹭Egret开发,并提供了简洁的Demo来展示多人实时联网游戏的开发过程和效果,用于演示多人匹配.数据传输.帧同步.创建房间.获取房间列表.消 ...

  7. Android 二维码 生成和识别(附Demo源码)

    Posted on 2013-08-25 23:15 泡泡糖 阅读( 20424) 评论( 7) 编辑 收藏 今天讲一下目前移动领域很常用的技术--二维码.现在大街小巷.各大网站都有二维码的踪迹,不管 ...

  8. 蓝牙配对模式 java_【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码...

    目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备  &  直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...

  9. 【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码

    目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备  &  直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...

  10. Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为7870字,预计阅读12分钟 前言 接<Android BlueToothBLE入门(一)--低功耗蓝牙介绍>上篇, ...

最新文章

  1. MATLAB红色分量图如何合成,如何修改一张图片中红色分量的值?
  2. python的数据清理_Python数据清理,清洗
  3. 网络小贷迎来最强监管,八成公司恐将面临转型或淘汰
  4. 《系统集成项目管理》第十三章 项目合同管理
  5. css border 虚线间距_【前端冷知识】CSS如何实现虚线框动画
  6. mysql where true_在MySQL中选择查询,检查字符串或在where子句中检查是否为true?
  7. 二分查找 —— 从三分支到二分支
  8. js打印(控件)及多种方式
  9. 30岁前挣到10万年薪 五位年轻人的高薪秘诀
  10. Centos中重置MySQL密码
  11. 云台球型摄像机行业现状调研及趋势分析报告
  12. 十月美剧精听总结 - 权力的游戏「Game of Throne」 黑袍纠察队「The boys」 老无所依「No Country for the old men」
  13. vuex报错TypeError: sub is not a function
  14. AI视频智能平台EasyCVR设备录像出现无法播放现象的问题修复
  15. numeric mysql_MySQL数据类型-decimal与numeric的区别
  16. 百度之星du熊学斐波那契I-C++实现
  17. 人民币符号输入的几种方法
  18. OpenCV手势识别-手掌特征提取
  19. 微信小程序开发初学:图片组件 - image
  20. 国内计算机类APP相关竞赛总结

热门文章

  1. 量子计算机具有天然的处理能力,新发现:光纤可用于构建具有强大计算与处理能力的超导量子计算机...
  2. php留言板源码免mysql_php留言本源码-夏日PHP+Mysql留言本下载 v0.3免费版--pc6下载站...
  3. bluecam连接步骤说明_智能门锁安装步骤分享
  4. 微信小程序跳过第三方的_微信小程序工具 第三方平台
  5. ie型lfsr_什么是PRBS
  6. 遗传算法优化的bp神经网络_【首发推荐】农学:基于遗传BP神经网络的采摘机器人手眼标定研究...
  7. java案例代码19--二分查找排序
  8. MySQL不同版本多实例部署——5.7和8.0
  9. linux查看文件大小命令DU
  10. pb 应用 迁移 linux_将你的应用迁移到 Python 3 的三个步骤 | Linux 中国