前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android NFC 技术解析,附 Demo 源码

Android NFC 技术解析,附 Demo 源码

作者头像
非著名程序员
发布2018-02-02 17:22:23
2.9K0
发布2018-02-02 17:22:23
举报
文章被收录于专栏:非著名程序员非著名程序员

近期由于项目需求,对 Android NFC 技术进行了一定的了解和深入,整合了一些网络、书籍资料,此文章仅作为自己的学习笔记。

NFC 是 Near Field Communication 缩写,即近距离无线通讯技术。可以在移动设备、消费类电子产品、PC 和智能控件工具间进行近距离无线通信。简单一点说,nfc 功能是什么?nfc 功能有什么用?其实** NFC** 提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。NFC 技术允许电子设备之间进行非接触式点对点数据传输,在十厘米 (3.9 英吋) 内,交换数据,其传输速度有 106Kbit / 秒、212Kbit / 秒或者 424Kbit / 秒三种。接下来我们更加详细的来了解一下 nfc 的应用。

一、NFC 是什么,它的工作模式?

NFC 工作模式主要有三种工作模式,分别是卡模式 (Card emulation)、点对点模式 (P2P mode) 和读卡器模式 (Reader/writer mode)。

(1)读卡器模式

数据在 NFC 芯片中,可以简单理解成 “刷标签”。本质上就是通过支持 NFC 的手机或其它电子设备从带有 NFC 芯片的标签、贴纸、名片等媒介中读写信息。通常 NFC 标签是不需要外部供电的。当支持 NFC 的外设向 NFC 读写数据时,它会发送某种磁场,而这个磁场会自动的向 NFC 标签供电。

(2)仿真卡模式

数据在支持 NFC 的手机或其它电子设备中,可以简单理解成 “刷手机”。本质上就是将支持 NFC 的手机或其它电子设备当成借记卡、公交卡、门禁卡等 IC 卡使用。基本原理是将相应 IC 卡中的信息凭证封装成数据包存储在支持 NFC 的外设中 。在使用时还需要一个 NFC 射频器(相当于刷卡器)。将手机靠近 NFC 射频器,手机就会接收到 NFC 射频器发过来的信号,在通过一系列复杂的验证后,将 IC 卡的相应信息传入 NFC 射频器,最后这些 IC 卡数据会传入 NFC 射频器连接的电脑,并进行相应的处理(如电子转帐、开门等操作)。

(3)点对点模式

该模式与蓝牙、红外差不多,用于不同 NFC 设备之间进行数据交换,不过这个模式已经没有有 “刷” 的感觉了。其有效距离一般不能超过 4 厘米,但传输建立速度要比红外和蓝牙技术快很多,传输速度比红外块得多,如过双方都使用 Android4.2,NFC 会直接利用蓝牙传输。这种技术被称为 AndroidBeam。所以使用 androidBeam 传输数据的两部设备不再限于 4 厘米之内。

二、ANDROID 对 NFC 的支持

不同的 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 页的数据。

项目源码地址:https://github.com/RickyYu/Nfc-Android

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、NFC 是什么,它的工作模式?
  • 二、ANDROID 对 NFC 的支持
    • (1)NDEF 数据的操作
      • (2)非 NDEF 数据的操作
        • (3)编写 NFC 程序的基本步骤
          • (1) 利用 NFC 标签让 Android 自动运行程序
      • 三、实战使用 NFC 标签
      • 四、NDEF 文本格式深度解析
        • (1)判断数据是否为 NDEF 格式
          • (2)NDEF 文本格式规范
          相关产品与服务
          短信
          腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档