热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

深入分析AndroidNFC技术androidnfc开发

本篇文章我们对android开发中nfc技术做了全面的原理分析以及实现过程,需要的读者们一起参考一下吧。

从概念,实现原理以及最红实现的源码等有助于大家对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)读卡器模式 http://www.jianshu.com/p/e89cc9bba8a6

数据在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 格式(操作步骤如上图,具体实现查阅项目代码)

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

MifareUltraligh t数据格式:将 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页的数据。

github 链接

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


推荐阅读
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • 七大策略降低云上MySQL成本
    在全球经济放缓和通胀压力下,降低云环境中MySQL数据库的运行成本成为企业关注的重点。本文提供了一系列实用技巧,旨在帮助企业有效控制成本,同时保持高效运作。 ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
author-avatar
淘宝_韩版女装铺
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有