有几天没有更新博客了,不过本篇却准备了许久,希望能带给每一位开发者最简单高效的学习方式。废话到此为止,下面开始正文。
  
  NFC(Near Field Communication,近场通信)是一种数据传输技术。与Wi-Fi、蓝牙、红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4厘米。但是NFC传输速度要比红外快。目前NFC已经出现了一些应用,例如电子标签识别、刷手机、点对点付款、身份识别、信息记录等,本篇文章的目的是为大家揭开NFC标签的面纱。
  
  NFC标签 NFC仿真卡下面我们先从NFC的工作模式开始阐述NFC,开发NFC必先了解NFC。
  
  的工作模式NFC支持如下3种工作模式:读卡器模式(Reader/www.lxinyul.cc/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 最大2 慢速115.2kbps,快速建立时间安全性 安全,硬件实现 安全,软件实现 不安全,使用IRFM时除外通信模式 主动-主动/被动 主动-主动 主动-主动成本 低 中 低对NFC的支持不同的NFC标签之间差异很大,有的只支持简单的读写操作,有时还会采用支持一次性写入的芯片,将NFC标签设计成只读的。当然,也存在一些复杂的NFC标签,例如,有一些NFC标签可以通过硬件加密的方式限制对某一区域的访问。还有一些标签自带操作环境,允许NFC设备与这些标签进行更复杂的交互。这些标签中的数据也会采用不同的格式。但Android SDK API主要支持NFC论坛标准(Forum Standard),这种标准被称为NDEF(NFC Data Exchange www.feishenbo.cn Format,NFC数据交换格式)。
  
  NDEF格式其实就类似于硬盘的NTFS,下面我们看一下NDEF数据:(1)NDEF数据的操作支持如下3种NDEF数据的操作:1)从NFC标签读取NDEF格式的数据。
  
  2)向NFC标签写入NDEF格式的数据。
  
  3)通过Android Beam技术将NDEF数据发送到另一部NFC设备。
  
  用于描述NDEF格式数据的两个类:1)www.boyuanyl.cn NdefMessage:描述NDEF格式的信息,实际上我们写入NFC标签的就是NdefMessage对象。
  
  2)NdefRecord:描述NDEF信息的一个信息段,一个NdefMessage可能包含一个或者多个NdefRecord。
  
  和NdefRecord是Android NFC技术的核心类,无论读写NDEF格式的NFC标签,还是通过Android Beam技术传递Ndef格式的数据,都需要这两个类。
  
  (2)非NDEF数据的操作对于某些特殊需求,可能要存任意的数据,对于这些数据,我们就需要自定义格式。这些数据格式实际上就是普通的字节流,至于字节流中的数据代表什么,就由开发人员自己定义了。
  
  (3)编写NFC程序的基本步骤1)设置权限,限制Android版本、安装的设备:要求当前设备必须要有NFC芯片 -->123412342)定义可接收Tag的清单需要配置一下launchMode属性:123123而Activity中,我们也抽取了一个通用的BaseNfcActivity,如下(后面的Activity实现都继承于BaseNfcActivity):/*** 1.子类需要在onCreate方法中做Activity初始化。
  
  * 2.子类需要在onNewIntent方法中进行NFC标签相关操作。
  
  *   当launchMode设置为singleTop时,第一次运行调用onCreate方法,*   第二次运行将不会创建新的Activity实例,将调用onNewIntent方法*   所以我们获取intent传递过来的Tag数据操作放在onNewIntent方法中执行*   如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的*   只要NFC标签靠近就执行*//*** 启动Activity,界面可见时*///一旦截获NFC消息,就会通过PendingIntent调用窗口}/*** 获得焦点,按钮可以点击*///设置处理优于所有其他NFC的处理}/*** 暂停Activity,界面获取焦点,按钮可以点击*///恢复默认状态}}1234567891011121314151617181920212223242526272829303132333435363738394041424312345678910111213141516171819202122232425262728293031323334353637383940414243注意:通常来说,所有处理NFC的Activity都要设置launchMode属性为singleTop或者singleTask,保证了无论NFC标签靠近手机多少次,Activity实例只有一个。
  
  接下来看几个具体的NFC标签应用实例,通过情景学习快速掌握NFC技术:3.两个NFC标签的简单实例1.利用NFC标签让Android自动运行程序场景是这样的:现将应用程序的包写到www.yinbaovip.cn/ NFC程序上,然后我们将NFC标签靠近Android手机,手机就会自动运行包所对应的程序,这个是NFC比较基本的一个应用。下面以贴近标签自动运行Android自带的“短信”为例。
  
  向NFC标签写入数据一般分为三步:1)获取Tag对象112)判断NFC标签的数据类型(通过Ndef.get方法)
  
  113)写入数据11详细实现代码如下:短信}//1.获取Tag对象}/*** 往标签写数据的方法**/}//转换成字节获得大小//2.判断NFC标签的数据类型(通过Ndef.get方法)
  
  //判断是否为NDEF标签//判断是否支持可写}//判断标签的容量是否够用}//3.写入数据写入成功当我们买回来的NFC标签是没有格式化的,或者没有分区的执行此步格式类//判断是否获得了NdefFormatable对象,有一些标签是只读的或者不允许格式化的//连接//格式化并将信息写入标签写入成功写入失败}}}}}12345678910111213141516171819202www.yxin7.com1222324252627282930313233343536373839404142434445464748495051525354555657585960616263123456789101www.linkenzc.cn1121314151617www.linlenyl.cn18192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263注意:设置 RunAppActivity 的 launchMode 属性为 singleTop。
  
  现在看一下效果图:将NFC标签贴近手机背面,自动写入数据,此时退出所有程序,返回桌面,然后再将NFC标签贴近手机背面,将会看到自动打开了“短信”。
  
  下来再看一个有趣的例子:2.利用NFC标签让Android自动打开网页如何让NFC标签贴近手机,手机可以自动打开一个网页呢?
  
  首先我们创建一个NdefRecord,Androiwww.jyz521.com/ d已经为我们提供好了这样的方法://直接接受一个Uri//接受一个Uri的对象12341234实现代码对比“3.利用NFC标签让Android自动运行程序”部分只是修改了writeNFCTag方法中1212为

Android NFC标签 开发深度解析 触碰的艺术的更多相关文章

  1. android nfc功能开发

    链接:Android NFC开发详细总结   https://blog.csdn.net/zhwadezh/article/details/79111348 链接2:Android NFC功能 简单实 ...

  2. Android图片编码机制深度解析(Bitmap,Skia,libJpeg)

    问题 工作中遇到了Android中有关图片压缩保存的问题,发现这个问题还挺深,而且网上资料比较有限,因此自己深入研究了一下,算是把这个问题自顶至下全部搞懂了,在此记录. 相关的几个问题如下: 1.An ...

  3. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

  4. Android NFC开发(一)——初探NFC,了解当前前沿技术

    Android NFC开发(一)--初探NFC,了解当前前沿技术 官方文档:http://developer.android.com/guide/topics/connectivity/nfc/ind ...

  5. Android NFC近场通信2——NFC标签调度

    上面一篇文章简单介绍了NFC的背景和技术应用,今天主要是讲解一下NFC如何发起通信和标签通信(主要是翻译android官网的资料,中间加入个人心得). NFC总是在一个发起者和一个被动目标之间发生.发 ...

  6. Android基础新手教程——3.4 TouchListener PK OnTouchEvent + 多点触碰

    Android基础新手教程--3.4 TouchListener PK OnTouchEvent + 多点触碰 标签(空格分隔): Android基础新手教程 本节引言: 如题,本节给大家带来的是To ...

  7. Android NFC开发概述

    NFC手机相比普通手机来说,有以下3个附加功能:  1.可以当成POS机来用,也就是“读取”模式   2.可以当成一张卡来刷,也就是NFC技术最核心的移动支付功能  3.可以像蓝牙.Wi-Fi一样做点 ...

  8. Android NFC技术(三)——初次开发Android NFC你须知道NdefMessage和NdefRecord

    Android NFC技术(三)--初次开发Android NFC你须知道NdefMessage和NdefRecord 这最近也是有好多天没写博客了,除了到处张罗着搬家之外,依旧还是许许多多的琐事阻碍 ...

  9. Android NFC开发(二)——Android世界里的NFC所具备的条件以及使用方法

    Android NFC开发(二)--Android世界里的NFC所具备的条件以及使用方法 NFC的应用比较广泛,而且知识面也是比较广的,所以就多啰嗦了几句,我还还是得跟着官方文档:http://dev ...

随机推荐

  1. Android 文件读写的例子

    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea ...

  2. IOS - UIImage

    IOS中对图片的处理 UIImage UIImage 继承于NSObject 以下介绍一下UIImage中的方法 首先是我们最经常使用的 通过图片的文件名称来获取这个图片 + (UIImage *)i ...

  3. Tomcat 配置 Probe 监控

    转至:http://9771104.blog.163.com/blog/static/19446622009811112836524/ 手上接触Tomcat的项目越来越多,虽说tomcat的manag ...

  4. Servlet, Listener 、 Filter.

    Java Web的三大组件:Servlet, Listener . Filter. 使用Listener监听器:八大监听器: 第一组:用于监听Servlet三个域对象的创建与销毁 1. Servlet ...

  5. felx第二天 ActionScript 基本语法和关键字

    flex中使用的注解有两种分别是:// 和/**/ flex使用的关键字如图

  6. OC中-数组是如何遍历的?

    #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool ...

  7. UTF-8编码与Unicode CS2的转换

    /* Convert a UTF-8 string into a UCS-2 array. */ void tcstrutftoucs(const char *str, uint16_t *ary, ...

  8. Fortify 4.0 帮助文档下载

    Fortify 4.0 帮助文档下载 http://pan.baidu.com/s/1hqzbF8o

  9. C语言枚举

    应该是 各种语言都支持枚举的. 所以这个 之前在我们java案例里面就出现过的季节代码再次出现了. 枚举帮我们起到一个变量值,在某一范围内的限定,用来避免一些非法值的键入. 值得注意的是,这里面的枚举 ...

  10. 主流存储引擎详解:Innodb,Tokudb、Memory、MYISAM、Federated

    主流存储引擎: Innodb:推荐使用,主力引擎,使用99%以上的场景 Tokudb:高速写入使用,日用量大量写入eg:500G可压缩为50G.适用于访问日志的写入,相对MYISAM有事务性,相对于I ...