JSR 257介绍的部分翻译

以下JSR257介绍部分摘自http://java.sun.com/developer/technicalArticles/javame/nfc/

只做了部分翻译

 

 

JSR 257: Contactless Communication API 非接触式通信API

 

JSR 257提供了以非接触方式访问智能卡和条形码的接口,支持NFC三种通信模式中的两种(阅读器模式和卡模拟模式),非接触通信API 为邻近非接触更新定义了一套API接口,这些API包括五个JAVA包:

 

Javax.microedition.contactless                        必须              所有目标侦测和公用类

Javax.microedition.contactless.ndef                可选              NDEF格式数据标签的通信

Javax.microedition.contactless.rf                    可选              RFID标签的通信

Javax.microedition.contactless.sc                   可选              与外部智能卡通信

Javax.microedition.contactless.visual              可选              读取/产生可视标签

 

MIDlet为运行与移动电话上的java应用程序,MIDlet应用JSR 257接口规范与SIM /智能卡以及可通过NFC芯片与外部读卡器/外部SE(安全单元)/外部标签通信。但一般 与内卡交互使用JSR 177(不是很确定)

 

据悉:世界知名的通信协议软件提供商 Stollmann采用意法半导体提供的芯片已经实现了JSR 257接口规范。

 

一个典型的非接触通信应用流程如下:

 

1.      第一步是应用程序侦测手机支持的目标类型

2.      对于每个支持的目标类型,应用程序可以注册一个目标监听器从而接收活动通知。或应用可注册一个PushRegistry,支持卡模拟模式中的NDEFSE的目标活动

3.      目标接近邻近场便被侦测到,轮流通过调用活动监听器通知应用,或PushRegistry激活MIDlet

4.      对于每一种被侦测到的目标,应用程序可以查到目标属性(target’s properties)

5.      应用程序可以与侦测到的目标进行连接,读,写和交换数据(目标是指such as NDEF tags, RFID tags, and external smartcards

6.      完成后释放资源,应用程序关闭所有打开的连接

 

以下为JSR 257内部结构图:

 

由上图可见,DiscoveryManager为最重要的类,它负责管理监听器(注册监听器到DiscoveryManager),监听器包括目标监听器,事务监听器,NDEF记录监听器。

 

目标监听器TargetListener,可在对应事件中获取到目标属性及目标类型,根据目标属性,可以使用对应的目标连接。

 

ISO1443Connection接口继承自TagConnection,被用于符合ISO14443-4的非接触智能卡

PlainTagConnection接口继承自TagConnection,被用于RFID标签(非NFC)的连接

NDEFTagConnection接口继承自TagConnection,被用于NFC论坛格式的RFID标签和非接触智能卡

 

VisualConnection接口被用于可视标签(如条形码)的无线通信

 

使用卡模拟模式活动订阅通知

在卡模拟模式下,设备上的SE(安全单元)与一个外部读写卡器之间进行通信和交易。在交易发生时,应用程序被通知(唤醒),但应用程序并不参与。

如下图所示:

 

1.      内部SE和外部读写卡器交互

2.      应用程序(MIDlet)当外部读写卡器被侦测到时被唤醒

3.      如果需要,应用程序和SE通信,使用ISO14443Connection接口与SE通信,或者使用JSR 177实现SATSA与内部SE通信。但是这与外部读写卡器和内部SE之间的通信无关。

SE与外部读写卡器的通信对于应用程序来说是透明的。 与外部读写卡器和JAVA CARD通信一样,SE与外部读写卡器之间使用APDU命令。

 

一张取自java card技术介绍part1的图片:

 

1.      在非接触手机上,左侧是内部读写卡器,MIDlet或外部读写卡器(卡模拟模式)

2.      右侧是卡片部分,可能为内部SE或者外部SE,可通过SATSAJSR 257访问。

3.      所有通信都是用APDU命令

 

注册和处理卡模拟活动

 

如前所述,当在卡模拟模式下,当外部读写卡器被侦测到时,应用程序(即MIDlet)被唤醒(通知),但是应用程序本身并不参与外部读写卡器与内部SE之间的业务。如果需要,应用程序可以使用APDU命令与内部SE通信,这个应用程序必须知道SE上的APPLET(即应用)。注册卡模拟活动订阅通知需要实现接口javax.microedition.contactless.TransactionListener 和它的方法externalReaderDetected(byte slot)。调用DiscoveryManagerdm.addTransactionListener(…)来注册监听器。以下为代码说明:

Listing 5 - Registering and Processing Card Emulation Activity

 

import javax.microedition.contactless.TransactionListener;

 

:

:

 

// Register Transaction Listener

try {

    dm.addTransactionListener(this);

} catch (IllegalStateException e) {

    ...

} catch (Exception e) {

    ...

}

 

:

:

 

/**

 * Called by the platform, when a card emulation event

 * has happened on the RFID hardware.

 *

 * @param slot is the slot needed to open the APDUConnection defined

 *             in JSR 177 to the external secure element, may be

 *             UNKNOWN_SLOT constant defined in this interface, if the

 *             slot can not be identified.

 */

public void externalReaderDetected(byte slot) {

 

    // Based on slot number above, using ISO14443Connection or SATSA

    // connect to applet, query applet, update screen, etc.

    ...

}   

   

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值