ACR122U Android端应用开发入道指南

原创 2016年08月30日 10:39:57

前言

“API指导”为本文的核心部分,其翻译自官方的API文档。在“参考资料”部分说明了我所参考的官方API的版本,并提供下载地址。为便于理解并着手开发,我在“相关知识”部分顺便添加了我查找到的与之相关的必备知识。


参考资料

  1. 官方API文档
    我主要参考官方提供的API文档来学习开发,其版本是1.1.3,请点击这里下载我上传到CSDN的开发包,内含API文档;或者从龙杰公司的官网下载,请点击这里前往,然后选择“下载”页面来下载。

  2. 应用程序接口指南
    此外,官方给出的应用程序接口说明文档也是必备的且极其重要的参考资料,我参考的是2.02版本,可以点击这里下载我上传到CSDN的文档,或者从龙杰公司的官网下载,请点击这里前往,选择“下载”页面来下载。


API指导

com.acs.smartcard 包描述

提供了在Android 3.1以及以上的系统中与ACS智能卡读卡器进行通讯的类和接口。为了创建并初始化一个Reader对象,先要通过调用Context.getSystemService()获得一个UsbManager的对象。

UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
Reader reader = new Reader(manager);

如果你想在你的应用中检测卡片,你应该为Reader对象提供一个Reader.OnStateChangeListener对象

reader.setOnStateChangeListener(new OnStateChangeListener() {
    @Override
    public void onStateChange(int slotNum, int prevState, int currState) {
        // TODO: Add your code here
    }
});

Opening Reader:打开读卡器

为了打开一个读卡器,你需要从UsbManager获得一个UsbDevice对象并请求一个访问该设备的权限,或者你可以使用一个intent filter来发现一个设备。更多的信息,请参考Android开发指导的“USB Host”部分。

try {
    reader.open(device);
} catch (IllegalArgumentException e) {
    e.printStackTrace();
}

如果UsbDevice对象不被支持或者由于通讯错误而不能被打开时,将抛出IllegalArgumentException(不合法的参数异常)。

Closing Reader:关闭读卡器

在你关闭了应用后Android系统不会自动关闭USB设备。你将不能在下次打开应用时使用在上次使用后没有拔出的读卡器。因此,建议你在关闭应用前要先关闭读卡器。

reader.close();

Resetting Card:重置卡片

在传输APDU(应用协议数据单元)之前,你需要先对卡片上电。如果卡片被正产地打开,ATR字符串将被返回。否则,它将返回一个指示错误的异常。

try {
    byte[] atr = reader.power(slotNum, Reader.CARD_WARM_RESET);
} catch (ReaderException e) {
    e.printStackTrace();
}

Setting Protocol:设置协议

在卡片上电后,卡片的状态变为可协商的(Reader.CARD_NEGOTIABLE)或者指定的(Reader.CARD_SPECIFIC).当卡片的状态不是指定的时你不能传输APDU命令。要选择一个协议,调用Reader.setProtocol()方法并将首选的协议作为其参数。

try {
    reader.setProtocol(slotNum, Reader.PROTOCOL_T0 | Reader.PROTOCOL_T1);
} catch (ReaderException e) {
    e.printStackTrace();
}

Transmitting APDU:传输APDU

在选择协议后,你可以使用Reader.transmit()来传输APDU命令。

byte[] command = { 0x00, 0x84, 0x00, 0x00, 0x08 };
byte[] response = new byte[300];
int responseLength;
try {
    responseLength = reader.transmit(slotNum, command, command.length, response,
            response.length);
} catch (ReaderException e) {
    e.printStackTrace();
}

Controlling Reader:控制读卡器

如果读卡器支持一套escape commands,你可以使用Reader.control()来控制读卡器。

// Get firmware version (ACR122)
byte[] command = { 0xFF, 0x00, 0x48, 0x00, 0x08 };

byte[] response = new byte[300];
int responseLength;
try {
    responseLength = reader.control(slotNum, Reader.IOCTL_CCID_ESCAPE, command,
            command.length, response, response.length);
} catch (ReaderException e) {
    e.printStackTrace();
}

Since:1.0


相关知识

概念术语

  1. APDU
    Application protocol Data Unit,应用协议数据单元。(在此直接贴维基百科上的内容)
    这里写图片描述
版权声明:本文为博主原创文章,转载请标明出处并告知博主

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

关于android的nfc问题 Ultralight c (通用卡)

最近在研究android的nfc问题 首先再网上有很多关于android nfc 读写的问题,但是大多数都是关于Mifare Classic类型卡的读写,我百试不得骑解,于是自己写了一些程序供大家...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java操作智能卡 IC卡 连接pcsc读卡器 发送APDU指令 源代码 下载 jdk1.6满足要求 java语言 操作IC卡 操作智能卡

java语言操作读卡器 不需要其他插件 jdk1.6 提供的Package javax.smartcardio可以直接连接pcsc读卡器、和读卡器进行指令交互 java语言 操作IC卡 操作智能卡...
  • wyx100
  • wyx100
  • 2014年09月22日 00:13
  • 4401

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

ACR122U-Android开发包

  • 2016年08月30日 10:22
  • 473KB
  • 下载

Android程序猿必看之《终端应用开发指南》

一、前言 4G移动网络的商用为移动互联网的蓬勃生长提供了肥沃的土壤,并协同国内外众多互联网厂商及终端厂商共同引领了中国移动互联网翻天覆地的发展与创新。 2014年以来移动4G用户数...

acr122u指定区块读写工具

  • 2017年05月26日 00:41
  • 1001KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACR122U Android端应用开发入道指南
举报原因:
原因补充:

(最多只允许输入30个字)