Contactless Communication API(JSR-257)介绍
文章信息
代码示例
源文件: Media:UIDReader.zip Media:URLWriter.zip Media:Examples.zip Media:NDEFPush.zip Media:ReaderApplication.zip Media:Ticket Applet.zip Media:Ticket.zip Media:TicketEmulation6131.zip
文章
由 max.chen
在 14 Aug 2011 创建
最后由 renlin
在 12 Jul 2012 编辑
Contents |
介绍
近场通信(Near Field Communication,NFC),又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输(在十厘米内)交换数据。这个技术由免接触式射频识别(RFID)演变而来,并向下兼容RFID,最早由Philips、Nokia和Sony主推,主要可能用于手机等手持设备中。由于近场通讯具有天然的安全性,因此,NFC技术被认为在手机支付等领域具有很大的应用前景。
为了推动 NFC 的发展和普及,飞利浦、索尼和诺基亚创建了一个非赢利性的行业协会——NFC 论坛,促进 NFC 技术的实施和标准化,确保设备和服务之间协同合作。目前,NFC 论坛在全球拥有 70 多个成员,包括:万事达卡国际组织、松下电子工业有限公司、 微软公司、摩托罗拉公司、NEC 公司、瑞萨科技公司、三星公司、德州仪器制造公司和 Visa 国际组织。
目前诺基亚的Symbian^3手机C7已经集成了NFC芯片。
开发环境
进行C7上的NFC开发需要下载以下SDK:
进行Series 40上的NFC开发可以选择以下SDK之一进行开发:
以上的SDK全都支持Eclipse和Netbeans。
JSR-257概述
JSR-257中的类和接口分布在五个包中:
- javax.microedition.contactless提供用于发现标签和一些其他要的基本类。
- javax.microedition.contactless.ndef包括通过NDEF格式的数据进行通信的类和接口。
- javax.microedition.contactless.rf提供通过不支持NDEF数据格式RFID标签进行通信的方式。
- javax.microedition.contactless.sc是通过其他智能卡进行通信。
- javax.microedition.contactless.visual提供读取和生成二维码的功能。
搜索标签
利用javax.microedition.contactless中的方法,可以非常方便的搜索到标签,并在targetDetected()方法中处理发现标签后的逻辑。
import java.io.IOException;
import javax.microedition.contactless.*;
import javax.microedition.contactless.ndef.*;
import javax.microedition.io.Connector;
/**
* Example class of how to discover targets using
* JSR 257 Contactless Communication API
*/
public class CCAPIExample implements TargetListener {
private DiscoveryManager dm;
public CCAPIExample() {
registerTargetToDiscovery();
}
public void registerTargetToDiscovery() {
// Check that NDEF_TAG target is supported
TargetType[] targets = DiscoveryManager.getSupportedTargetTypes();
boolean supported = false;
for (int i=0; i<targets.length; i++) {
if (targets[i].equals(TargetType.NDEF_TAG)) {
supported = true;
}
}
if (supported) {
// Get DiscoveryManager instance and
// set TargetListener for NDEF_TAG target
dm = DiscoveryManager.getInstance();
try {
dm.addTargetListener(this, TargetType.NDEF_TAG);
}
catch (ContactlessException ce) {
// handle exception
}
}
}
public void targetDetected(TargetProperties[] prop) {
// handle notification
}
}
读取标签
如果需要读取NDEF格式的数据,就需要javax.microedition.contactless.ndef包的功能。
import java.io.IOException;
import javax.microedition.contactless.*;
import javax.microedition.contactless.ndef.*;
import javax.microedition.io.Connector;
/**
* Example class of how to read data from NDEF_TAG target
* using JSR 257 Contactless Communication API
*/
public class CCAPIExample implements TargetListener {
private NDEFTagConnection conn = null;
public CCAPIExample() {
registerTargetToDiscovery();
}
public void registerTargetToDiscovery() {
// do the target discovery registration
}
public void targetDetected(TargetProperties[] prop) {
// Select first found target
TargetProperties target = prop[0];
// check that target type is NDEF_TAG
TargetType[] types = target.getTargetTypes();
for (int i=0; i<types.length; i++) {
if (types[i].equals(TargetType.NDEF_TAG)) {
try {
// Get URL to open the connection
String url = target.getUrl();
// Open NDEFTagConnection to the target
conn = (NDEFTagConnection)Connector.open(url);
// Read data from the target
NDEFMessage message = conn.readNDEF();
NDEFRecord[] records = message.getRecords();
for (int j=0; j<records.length; j++) {
// Handle data
}
}
catch (IOException ioe) {
// Handle exception
}
catch (ContactlessException ce) {
// Handle exception
}
}
else {
i++;
}
}
}
}

