Android NFC简介

  

目录:

Android NFC . 1

1 简介 ... 1

1.1 什么是 NFC . 1

1.2 Android 上的 NFC . 2

1.3 Android 中的 NFC 通讯机制 ... 2

2 用法 ... 3

2.1 读取 tag . 3

2.2 发送消息 ... 5

2.2.1 发送过程 ... 5

扫描二维码关注公众号,回复: 849983 查看本文章

2.2.2 NDEF 消息格式 ... 6

 

 

1 简介

1.1 什么是 NFC

近场通讯 (Near Filed Communication) 技术是一种近距离的高频无线通信技术, 通常距离是4 厘米或更短。 NFC 工作频率是 13.56M Hz, 传输速率是 106kbit/s 848kbit/s. NFC 总是在一个发起者和一个被动目标之间发生。发起者发出近场无线电波,这个近场可以给被动目标供电。这些被动的目标包括不需要电源的标签,卡,也可以是有电源的设备。

与其他无线通信技术比较, 例如蓝牙和 WiFi NFC 提供更低贷款和距离,并且低成本,不需要供电,不需要实现匹配,整个通信过程仅仅是短短的靠近一秒就能完成。

1.2 Android 上的 NFC

Android Android 2.3(API Level 9) 中首次增加了对NFC 的支持,但是只能读取tag ,有很多不完善的地方。在Level 10 中增加了对tag 的写,不过构造和解析消息都是需要自己来处理。

后来的Android 4.0 ICS(API Level 14) 中全面提升了NFC 的功能,支持两台NFC 手机的相互通信,并且封装了方便的消息构造和解析接口。

Android 提供了三种级别的NFC 消息:

Ø  android.nfc.action.NDEF_DISCOVERED : 由应用程序构造的NDEFNFC Data Exchange Format NFC 数据交换格式)消息。

Ø  android.nfc.action.TECH_DISCOVERED :  现有的标准NFC 协议构造的消息。

Ø  android.nfc.action.TAG_DISCOVERED :不符合前面两种格式的消息。

1.3 Android 中的 NFC 通讯机制

           首先应用程序向系统注册感兴趣的Intent ,当系统的NFC 服务收到一条tag 之后,会打开合适的应用并传递Intent 。如果同时有N 个应用都对这个tag 感兴趣,并且都不在前台,则系统会弹出选择列表让用户选择,如果其中某个应用在前台,则系统直接将Intent 投递到此应用。具体如何注册见后面的用法。

 

2 用法

2.1 读取 tag

首先,必须在manifest 中申明NFC 的权限和feature

< uses-permission android:name = "android.permission.NFC" />

< uses-feature android:name = "android.hardware.nfc" />

如果应用必须拥有NFC 的手机才能安装,则在 uses-feature 中加上属性 android:required = "true" 方便marekt 过滤。

 

然后注册感兴趣的Intent

u  NDEF 格式的消息

这里的data 指定了感兴趣的数据类型和格式,系统会自动过滤出符合条件的Intent 。上面这个data 表示只接受纯文本的数据。如果只接受 http://www.qq.com 这个网址,则data 定义如下:

注意,这个类型 < category android:name = "android.intent.category.DEFAULT" /> 要加上。

 

u  TECH 格式的消息

meta-data 中的resource 指定了对使用了哪些技术的tag 感兴趣。filter_nfc.xml 的内容如下:

这里是将所有的tech 标准都放到里面了,实际使用的时候不应如此,应该取一个或多个子集。这里关于tech 列表的子集定义还有一些规范,网上可以查到,就不赘述。

 

u  TAG 格式的消息

如此,则所有没有被捕获的Intent 就会发送到这里来,算是各种未知NFC 数据的集散地。

 

Tag 分发系统流程图如下:

 

2.2 发送消息

       2.2.1 发送过程

首先取得一个NFCAdapter ,一般是使用默认的:

 

三个发送消息相关的API

Ø  public void setNdefPushMessage (NdefMessage message, Activity activity, Activity... activities)

设置NDEF 消息。API 文档上说这个方法设置之后不需要让用户操作,设备靠近会自行发出,但是经过尝试发现不行,也许是有什么没注意到的地方。

 

Ø  public void setNdefPushMessageCallback (NfcAdapter.CreateNdefMessageCallback callback, Activity activity, Activity... activities)

设置NDEF 消息的构造器,每次构造消息都会调用callbackcreateNdefMessage 方法获取NDEF 消息。

 

Ø  public void setOnNdefPushCompleteCallback (NfcAdapter.OnNdefPushCompleteCallback callback, Activity activity, Activity... activities)

设置NDEF 消息发送完毕之后的回调接口。

 

       2.2.2 NDEF 消息格式

一个NdefMessage 对象是由NNdefRecord 组成,NdefRecord 可以根据自己的需要去定义里面的内容,不过如果要构造公共的标准NdefRecord ,就需要查阅API 文档了。

简单的用法如下:

猜你喜欢

转载自chroya.iteye.com/blog/1618053