Android NFC简介

本文介绍了NFC技术的基本概念,详细阐述了其在Android平台上的应用,包括读取标签、发送消息的方法及NDEF消息格式等内容。

目录:

Android NFC

简介

1.1 什么是 NFC

1.2 Android 上的 NFC

1.3 Android 中的 NFC 通讯机制

用法

2.1 读取 tag

2.2 发送消息

2.2.1 发送过程

2.2.2 NDEF 消息格式

 

 

简介

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 由应用程序构造的NDEF (NFC 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.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 

 NDEF 格式的消息 

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

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

 

 TECH 格式的消息 

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

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

 

 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 消息的构造器,每次构造消息都会调用callback 的createNdefMessage 方法获取NDEF消息。

 

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

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

 

       2.2.2 NDEF 消息格式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值