Android NFC标签 开发深度解析 触碰的艺术

news/2024/10/18 6:05:30/

这篇博客是在鸿洋的微信公众号看到的感觉收益非浅。于是转存于自己博客上以后可查阅。

本文由郭朝投稿。

郭朝的博客地址:

http://blog.csdn.net/smartbetter




有几天没有更新博客了,不过本篇却准备了许久,希望能带给每一位开发者最简单高效的学习方式。废话到此为止,下面开始正文。 


NFC(Near Field Communication,近场通信)是一种数据传输技术。与Wi-Fi、蓝牙、红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4厘米。但是NFC传输速度要比红外快。目前NFC已经出现了一些应用,例如电子标签识别、刷手机、点对点付款、身份识别、信息记录等,本篇文章的目的是为大家揭开NFC标签的面纱。




下面我们先从NFC的工作模式开始阐述NFC,开发NFC必先了解NFC。


1

NFC的工作模式

   

NFC支持如下3种工作模式:读卡器模式(Reader/writer mode)、仿真卡模式(Card Emulation Mode)、点对点模式(P2P 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会直接利用蓝牙传输。这种技术被称为Android Beam。所以使用Android Beam传输数据的两部设备不再限于4厘米之内。 
点对点模式的典型应用是两部支持NFC的手机或平板电脑实现数据的点对点传输,例如,交换图片或同步设备联系人。因此,通过NFC,多个设备如数字相机,计算机,手机之间,都可以快速连接,并交换资料或者服务。


下面看一下NFC、蓝牙和红外之间的差异:


对比项 NFC 蓝牙 红外
网络类型 点对点 单点对多点 点对点
有效距离 <=0.1m <=10m,最新的蓝牙4.0有效距离可达100m 一般在1m以内,热技术连接,不稳定
传输速度 最大424kbps 最大24Mbps 慢速115.2kbps,快速4Mbps
建立时间 <0.1s 6s 0.5s
安全性 安全,硬件实现 安全,软件实现 不安全,使用IRFM时除外
通信模式 主动-主动/被动 主动-主动 主动-主动
成本


2

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

Activity清单需要配置一下launchMode属性:

<activityandroid:name=".TagTextActivity"android:launchMode="singleTop"/>

而Activity中,我们也抽取了一个通用的BaseNfcActivity,如下(后面的Activity实现都继承于BaseNfcActivity):



注意:通常来说,所有处理NFC的Activity都要设置launchMode属性为singleTop或者singleTask,保证了无论NFC标签靠近手机多少次,Activity实例只有一个。

接下来看几个具体的NFC标签应用实例,通过情景学习快速掌握NFC技术.


3

两个NFC标签的简单实例

   

1.利用NFC标签让Android自动运行程序


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


向NFC标签写入数据一般分为三步:


1)获取Tag对象

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

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

Ndef ndef = Ndef.get(tag);

3)写入数据

ndef.writeNdefMessage(ndefMessage);

详细实现代码如下:



注意:设置 RunAppActivity 的 launchMode 属性为 singleTop。

现在看一下效果图:




将NFC标签贴近手机背面,自动写入数据,此时退出所有程序,返回桌面,然后再将NFC标签贴近手机背面,将会看到自动打开了“短信”。 



下来再看一个有趣的例子:


2.利用NFC标签让Android自动打开网页


如何让NFC标签贴近手机,手机可以自动打开一个网页呢?

首先我们创建一个NdefRecord,Android已经为我们提供好了这样的方法:

//直接接受一个Uri
public NdefRecord createUri(String uriString); 
//接受一个Uri的对象
public NdefRecord createUri(Uri uri);  

实现代码对比“3.利用NFC标签让Android自动运行程序”部分只是修改了writeNFCTag方法中

NdefMessage ndefMessage = new NdefMessage(new NdefRecord[]{
   NdefRecord.createApplicationRecord(mPackageName)});

NdefMessage ndefMessage = new NdefMessage(new NdefRecord[]{
NdefRecord.createUri(Uri.parse("http://www.baidu.com"))});

其余不变。




上面这个功能还是比较有用的,例如我们往某些商品上贴上NFC标签,里面写入该商品的详细介绍网页Uri,当用户贴近商品时,就会自动打开该商品的详情介绍。


这只是个开始,原文还包含了NDEF文本格式深度解析、非NDEF格式深度解析等相关内容,由于文章内容过多,可以点击左下角阅读原文继续阅读。


本篇NFC项目代码已经分享

  • Github: https://github.com/smartbetter/Android-NFC

欢迎Follow、Fork、Star




http://www.ppmy.cn/news/465045.html

相关文章

sar常规用法

sar&#xff08;System Activity Reporter&#xff09;是一个在Linux上收集和报告系统性能数据的工具。它可以提供各种系统指标&#xff0c;如CPU使用率、内存利用率、磁盘活动、网络流量等。以下是sar的一些常见用法&#xff1a; 安装sar&#xff1a;在大多数Linux发行版中&a…

Android NFC开发详细介绍一(理论篇)

大家在做nfc开发之前可以看一下我的上篇文章区分IC卡和ID卡 Near Field Communication (NFC) 为一短距离无线通信技术,通常有效通讯距离为4厘米以内。NFC工作频率为13.65 兆赫兹,通信速率为106 kbit/秒到 848kbit/秒,NFC手机相比普通手机来说,NFC整合了非接触式读卡器、非…

iOS NFC开发(读标签与写标签)

#一.说明 1-苹果手机从iPhone6开始装有NFC硬件&#xff0c;但并未对第三方应用开放。因此iPhone6及iPhone6s不能识别NFC标签&#xff0c;但是可以使用系统NFC功能如&#xff1a;刷地铁。 2-苹果从iOS11系统开始开放NFC读取功能&#xff0c;同时要求iPhone7及以上机型。不满足要…

Android中NFC标签卡的读取

前几天老大把一张卡拿给我说要我把用NFC技术读出它的uid来&#xff0c;写成一个demo给他&#xff0c;我第一反应就是一脸闷逼&#xff0c;可是卡已经交给我了&#xff0c;只能照办不误了&#xff01;在我不长的开发生涯中是从来没有接触过NFC的&#xff0c;所以在接到任务后&am…

android 苹果支付,不仅应用于支付 手机上的NFC功能解析

对于NFC功能大家都已经比较熟悉&#xff0c;在之前就已经有手机配备NFC功能。此前北京移动还联合一卡通推出过NFC-SIM卡&#xff0c;可以让手机作为北京市政一卡通来使用。而在去年苹果推出Apple Pay之后&#xff0c;NFC功能俨然成为了手机支付必不可少的环节&#xff0c;在未来…

NFC 协议简介

NFC技术标准 NFC标准兼容飞利浦的 Mifare 标准(ISO 14443 A&#xff0c;B)&#xff0c;以及索尼公司的FeliCa 标准&#xff0c;其中TypeA&#xff0c;TypeB为Mifare标准&#xff0c;F为Felica标准。 特性说明频段13.56 MHz通讯距离约10厘米传输速度106kbps、212kbps、424kbps…

苹果7pnfc功能门禁卡_苹果NFC功能不再鸡肋?原来还能这么玩,内附门禁卡复制教程...

安卓手机用户NFC功能发展越来越好&#xff0c;很多功能以及涉及到我们日常生活&#xff0c;乘公交、门禁卡等。而苹果早在iPhone 6S的时候就开始搭载NFC功能&#xff0c;却只能实现Apple pay支付功能&#xff0c;且使用程度不高。 对于用户反馈&#xff0c;苹果于去年逐渐开放部…

android nfc读写demo,android nfc常用标签读取总结

有几天没有更新博客了,不过本篇却准备了许久,希望能带给每一位开发者最简单高效的学习方式。废话到此为止,下面开始正文。 NFC(Near Field Communication,近场通信)是一种数据传输技术。与Wi-Fi、蓝牙、红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4厘米。…