×
Namespaces

Variants
Actions

Contactless Communication API(JSR-257)介绍

From Nokia Developer Wiki
Jump to: navigation, search
WP Metro Icon Chinese.png
Article Metadata

代码示例
文章
max.chen 在 14 Aug 2011 创建
最后由 hamishwillee 在 23 Jul 2013 编辑

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++;
}
}
}
 
}

代码示例

This page was last modified on 23 July 2013, at 10:57.
301 page views in the last 30 days.
×