友我科技NFC读写器andriod开发指南

支持IC卡读卡器在andriod中应用,andriod4.0及以上

WEB开发指南 Android开发指南 在线Android例程目录


随着Android系统的设备越来越多,在Andriod设备上使用NFC读写器变得越来越广泛。为了将NFC读写器应用android设备上,友我科技独立研发了NFC读写器的android开发包,使用此开发包,工程师只需在工程中导入jar包,使用java语言就可以轻松的开发出Android下的NFC读写器应用APP。

友我科技NFC读写器Android开发包相关信息:

项目 信息
支持的Android系统 4.0及以上版本
读卡器接口 USB HID(需OTG数据线)
jar包及下载 yoworfidreader.jar
支持的NFC读写器 YW-605HAYW-607
获取NFC读写器样品 YW-605HAYW-607
演示程序

点击下载:NFC读写器Android演示程序

扫描下载:

二维码

 

 

NFC读写器Android开发指南                                

在所有API接口中有3种返回值,说明如下:
第一种:void, 无任何返回值
第二种:int,返回整形,>=0为成功,<0为失败
第三种:byte[], byte数组, 如果为null则为失败,只要不为null,就是执行成功

首先在工程中导入yoworfidreader.jar接口包,同时在在order and Export中选中yoworfidreader.jar 包,这样可以随着你的应用程序一起发布。

导入yoworfidreader.jar

选中yoworfidreader.jar

然后再自己的工程中创建usbreader的object,如下所示:

public usbreader rfidreader;
rfidreader = new usbreader();

只要rfidreader!=null,就可以使用了。

类usbreader的属性:

属性名 类型(类名) 名称 备注
ReaderHardware readerhardware NFC读卡器硬件操作类 可以操作读卡器的蜂鸣器,LED灯等
ISO14443A iso14443A ISO14443A类型卡片操作类 读写M1卡,CPU卡等卡片
ISO15693 iso15693 ISO15693类型卡片操作类 读写15693卡,包含Tagit,ICode2,MB89R118C等
ID2Card id2card 身份证卡片操作类 读取身份证卡的卡号
PSAM PSam

PSAM卡操作类

 

操作PSAM卡

类usbreader的方法:

1. void TryUSB(Context context)

TryUSB方法的作用是尝试连接USB设备,在android系统下,连接USB设备会出现权限的提示窗口,需要此时点击是按钮。

rfidreader.TryUSB(this);

 

2. boolean Initial(Context context)

Initial方法的作用是初始化 NFC读写器,只有经过初始化后才能对读卡器进行其他操作。初始化成功返回true,失败返回false。

rfidreader.Initial(this);

 

usbreader类有多个public的属性,这些属性分别操作各类IC卡片

1、ReaderHardware,类名:readerhardware,功能:管理读卡器硬件和切换卡片类型

类readerhardware的属性:

属性名 类型 名称 备注
SEARCHCARDMODE_14443A byte A类卡 常量,读写M1卡,CPU卡等卡片,需要切换此种类型
SEARCHCARDMODE_14443B byte B类卡 常量,身份证卡切换的类型
SEARCHCARDMODE_15693 byte 15693卡 常量,15693卡切换的类型

类readerhardware的方法:

1.1 int YW_GetLibVersion()

YW_GetLIBVersion方法获取jar库的版本号。如下代码所示:

int Ver = rfidreader.ReaderHardware.YW_GetLibVersion();

 

1.2 int YW_GetReaderVersion()

YW_GetReaderVersion方法获取NFC读写器的版本号。如下代码所示:

int Ver = rfidreader.ReaderHardware.YW_GetReaderVersion();

 

1.3 byte[] YW_GetReaderSerial()

YW_GetReaderSerial方法获取NFC读写器的序列号。如下代码所示:

byte[] SerialNo = rfidreader.ReaderHardware.YW_GetReaderSerial();

 

1.4 byte[] YW_GetReaderNo()

YW_GetReaderSerial方法获取NFC读写器型号。如下代码所示:

byte[] ModelNo = rfidreader.ReaderHardware.YW_GetReaderNo();

 

1.5 int YW_Buzzer(int Time_ON, int Time_OFF, int Cycle)

YW_Buzzer方法控制NFC读写器的蜂鸣器。参数如下:
Time_ON: 蜂鸣器鸣叫的时间(100ms单位)
Time_OFF: 蜂鸣器不响的时间(100ms单位)
Cycle:上述循环的次数

rfidreader.ReaderHardware.YW_Buzzer(5,5,1);

 

1.6 int YW_Led(int LEDIndex, int Time_ON, int Time_OFF, int Cycle, int LedIndexOn)

YW_Led方法控制NFC读写器的LED灯。参数如下:
LEDIndex:LED灯的序号
Time_ON: 蜂鸣器鸣叫的时间(100ms单位)
Time_OFF: 蜂鸣器不响的时间(100ms单位)
Cycle:上述循环的次数
LedIndexOn:最后灯亮的LED序号

rfidreader.ReaderHardware.YW_Led(1,5,5,1,1);

 

1.7 int YW_AntennaStatus(boolean ATStatus)

YW_AntennaStatus方法控制NFC读写器天线状态。参数如下:
ATStatus:true为开天线,false为关天线,默认状态下天线时开启的

rfidreader.ReaderHardware.YW_AntennaStatus(true);

 

1.8 int YW_SearchCardMode(byte Mode)

YW_SearchCardMode方法控制NFC读写器天操作的卡类型。PSAM卡不用切换,参数如下:
Mode:卡的类型,值分别如下:
SEARCHCARDMODE_14443A,A类卡
SEARCHCARDMODE_14443B,B类卡
SEARCHCARDMODE_15693,15693类卡

rfidreader.ReaderHardware.YW_SearchCardMode(rfidreader.ReaderHardware.SEARCHCARDMODE_14443A);

2、ISO14443A,类名:iso14443A,功能:操作TypeA卡,包括M1卡,CPU卡等

类iso14443A的属性:

属性名 类型(类名) 名称 备注
REQUESTMODE_ALL byte 寻所有卡 常量
REQUESTMODE_ACTIVE byte 寻active的卡 常量
Key_A byte A密钥 常量
Key_B byte B密钥 常量
MULTIMODE_ONE byte

返回一张卡

 

常量
MULTIMODE_ERR byte

返回错误

 

常量
CardType short

卡类型

 

卡类型,执行某些函数后,会改变此值
CardMemery byte

卡内存代码

 

卡内存,执行某些函数后,会改变此值
ValueBalance int

钱包余额

 

钱包余额,读取钱包余额成功后,改变此值
ATQA short

ATQA

 

ATQA,执行某些函数后,会改变此值
SAK byte

SAK

 

SAK,执行某些函数后,会改变此值

类iso14443A的方法:

 

2.1 int YW_RequestCard(byte requestMode)

YW_RequestCard寻卡。参数如下:
requestMode:寻卡模式,有如下两种值可用:
REQUESTMODE_ALL:寻所有的卡
REQUESTMODE_ACTIVE:寻激活的卡

int rt = rfidreader.ISO14443A.YW_RequestCard(rfidreader.ISO14443A.REQUESTMODE_ACTIVE);

 

2.2 byte[] YW_AntiCollide()

防冲撞读卡号。

byte[] CardNo = rfidreader.ISO14443A.YW_AntiCollide();

 

2.3 int YW_CardSelect(byte[] CardNo)

根据卡号选择一张卡来操作。参数如下:
CardNo:要操作的卡号

int rt = rfidreader.ISO14443A.YW_CardSelect(CardNo);

 

2.4 byte[] YW_AntiCollideAndSelect(byte MultiMode)

防冲撞并且选择一张卡。该函数集成了YW_AntiCollide和YW_CardSelect两个函数 参数如下:
MultiMode:遇到多张卡的处理方式,有两种值可用
MULTIMODE_ONE:返回一张卡
MULTIMODE_ERR:返回错误
受影响的属性值:
CardMemery

byte[] CardNo = rfidreader.ISO14443A.YW_AntiCollideAndSelect(rfidreader.ISO14443A.MULTIMODE_ONE);

 

2.5 int YW_CardHalt()

对当前卡片休眠,休眠后无法使用REQUESTMODE_ACTIVE来寻卡。

int rt = rfidreader.ISO14443A.YW_CardHalt();

 

2.6 int YW_DownLoadKey(int KeyIndex, byte[] Key)

下载密钥到读写器中, 参数如下:
KeyIndex:密钥序号,最多可以下载32组密钥,序号从0到31
Key:密钥,6字节

byte[] Key = new byte[6];
for(int i=0;i<6;i++)Key[i]=0xFF;
rfidreader.ISO14443A.YW_DownLoadKey(0,Key);

 

2.7 int YW_KeyDown_Authorization(byte KeyMode, int BlockAddr, byte KeyIndex)

使用下载的密钥进行认证, 参数如下:
KeyMode:使用A密钥还是B密钥认证,Key_A为A密钥,Key_B为B密钥
BlockAddr:块序号
KeyIndex:密钥序号,0到31

int rtAuth= rfidreader.ISO14443A.YW_KeyDown_Authorization(rfidreader.ISO14443A.Key_A,1,0);

 

2.8 int YW_KeyAuthorization(byte KeyMode, int BlockAddr, byte[] Key)

使用密钥进行认证, 参数如下:
KeyMode:使用A密钥还是B密钥认证,Key_A为A密钥,Key_B为B密钥
BlockAddr:块序号
Key:密钥,6字节

byte[] Key = new byte[6];
for(int i=0;i<6;i++)Key[i]=0xFF;
int rtAuth= rfidreader.ISO14443A.YW_KeyAuthorization(rfidreader.ISO14443A.Key_A,1,Key);

 

2.9 byte[] YW_ReadaBlock(int BlockAddr)

读数据块, 参数如下:
BlockAddr:块序号

byte[] Data=rfidreader.ISO14443A.YW_ReadaBlock(1);

 

2.10 int YW_WriteaBlock(int BlockAddr, byte[] BlockData)

写数据块, 参数如下:
BlockAddr:块序号
BlockData:要写入的数据,16字节

byte[] Data = new byte[16];
for(int i=0;i<16;i++)Data[i]=0xAA;
int rt= rfidreader.ISO14443A.YW_WriteaBlock(1,Data);

 

2.11 int YW_Purse_Initial(int BlockAddr, int Value)

初始化钱包, 参数如下:
BlockAddr:块序号
Value:要初始化的值,16字节

int rtAuth= rfidreader.ISO14443A.YW_Purse_Initial(1,200);

 

2.12 int YW_Purse_Read(int BlockAddr)

钱包读余额,返回值不是余额,如果返回成功,余额等于ValueBalance 参数如下:
BlockAddr:块序号

int Balance=0;
int rt= rfidreader.ISO14443A.YW_Purse_Read(1);
if(rt>0)Balance=rfidreader.ISO14443A.ValueBalance;

 

2.13 int YW_Purse_Charge(int BlockAddr, int Value)

钱包充值,参数如下:
BlockAddr:块序号
Value:充值的金额

int rt= rfidreader.ISO14443A.YW_Purse_Charge(1,100)

 

2.14 int YW_Purse_Decrease(int BlockAddr, int Value)

钱包消费,参数如下:
BlockAddr:块序号
Value:消费的金额

int rt= rfidreader.ISO14443A.YW_Purse_Decrease(1,100)

 

2.15 int YW_Transfer(int BlockAddr)

钱包Transfer,参数如下:
BlockAddr:块序号

int rt= rfidreader.ISO14443A.YW_Transfer(1);

 

2.16 int YW_Restore(int BlockAddr)

钱包Restore,参数如下:
BlockAddr:块序号

int rt= rfidreader.ISO14443A.Restore(1);

 

2.17 byte[] YW_RequestAntiandSelect(byte requestMode,byte MultiMode)

寻卡,防冲突和选卡,如果正确,则返回卡号,此函数相当于执行了三个函数,YW_RequestCard, YW_AntiCollide, YW_CardSelect,参数如下:
requestMode:寻卡模式,有如下两种值可用:
REQUESTMODE_ALL:寻所有的卡
REQUESTMODE_ACTIVE:寻激活的卡
MultiMode:遇到多张卡的处理方式,有两种值可用
MULTIMODE_ONE:返回一张卡
MULTIMODE_ERR:返回错误
受影响的属性值:
ATQA,SAK

int rt= rfidreader.ISO14443A.YW_RequestAntiandSelect(rfidreader.ISO14443A.REQUESTMODE_ACTIVE, rfidreader.ISO14443A.MULTIMODE_ONE);

 

2.18 int YW_WriteM1MultiBlock( int StartBlock, int BlockNums, byte[] AllData)

写多个数据块,注意必须在同一个扇区,不能跨扇区, 参数如下:
StartBlock:开始块序号
BlockNums:要写的块数量
AllData:要写入的数据,BlockNums*16字节

byte[] Data = new byte[32];
for(int i=0;i<32;i++)Data[i]=0xAA;
int rt= rfidreader.ISO14443A.YW_WriteM1MultiBlock(1,Data);

 

2.19 byte[] YW_ReadM1MultiBlock( int StartBlock, int BlockNums)

读多个数据块,,注意必须在同一个扇区,不能跨扇区 参数如下:
StartBlock:开始块序号
BlockNums:要读的块数量

byte[] Data=rfidreader.ISO14443A.YW_ReadaBlock(1,2);

 

2.20 byte[] YW_TypeA_Reset( byte requestMode, byte MultiMode)

CPU卡复位,复位成功,返回复位信息,参数如下:
requestMode:寻卡模式,有如下两种值可用:
REQUESTMODE_ALL:寻所有的卡
REQUESTMODE_ACTIVE:寻激活的卡
MultiMode:遇到多张卡的处理方式,有两种值可用
MULTIMODE_ONE:返回一张卡
MULTIMODE_ERR:返回错误

byte[] CPUResetData= rfidreader.ISO14443A.YW_TypeA_Reset(rfidreader.ISO14443A.REQUESTMODE_ACTIVE, rfidreader.ISO14443A.MULTIMODE_ONE);

 

2.21 byte[] YW_TypeA_COS( byte[] COS)

CPU卡执行COS指令,返回执行COS的结果,参数如下:
COS:COS指令byte数组

byte[] cos=new byte[5];//获取8字节随机数
cos[0]=0;
cos[1]=0x84;
cos[2]=0;
cos[3]=0;
cos[4]=8;
byte[] CPUData= rfidreader.ISO14443A.YW_TypeA_COS(cos);

 

2.22 byte[] YW_UltraLightRead( int BlockID)

UltraLight卡读数据块, 参数如下:
BlockID:块序号

byte[] Data=rfidreader.ISO14443A.YW_UltraLightRead(1);

 

2.10 int YW_UltraLightWrite( int BlockID, byte[] BlockData)

UltraLight写数据块, 参数如下:
BlockID:块序号
BlockData:要写入的数据,4字节

byte[] Data = new byte[4];
for(int i=0;i<4;i++)Data[i]=0xAA;
int rt= rfidreader.ISO14443A.YW_UltraLightWrite(1,Data);

 

3、PSAM,类名:PSam,功能:操作PSAM卡

类:PSam的属性:

属性名 类型(类名) 名称 备注
PSamIndex byte PSAM卡序号 每个读卡器最多带3个PSAM卡,依次为1,2,3,指定一个操作

 

类PSam的方法:

 

3.1 int YW_SAM_Baud(byte BaudIndex)

指定PSAM卡波特率, 参数如下:
BaudIndex:波特率序号,从0到9

int rt=rfidreader.PSAM.YW_SAM_Baud(0);

 

3.2 byte[] YW_SAM_Reset()

PSAM卡复位,成功返回复位信息:

byte[] PsamReset=rfidreader.PSAM.YW_SAM_Reset();

 

3.3 byte[] YW_SAM_Reset_Ex(byte SAMVoltage)

含电压选择的PSAM卡复位,成功返回复位信息,, 参数如下:
SAMVoltage:SAM卡电压,0为3.3V, 1为5V

byte[] PsamReset=rfidreader.PSAM.YW_SAM_Reset_Ex(0);

 

3.4 byte[] YW_SAM_COS(byte[] COS)

PSAM卡执行COS,成功返回结果信息,, 参数如下:
COS:SAM卡COS指令

byte[] cos=new byte[5];//获取8字节随机数
cos[0]=0;
cos[1]=0x84;
cos[2]=0;
cos[3]=0;
cos[4]=8;
byte[] SAMData= rfidreader.PSAM.YW_SAM_COS(cos);

 

3.5 int YW_SAM_PPSBaud(byte BaudIndex)

指定PSAM卡PPS波特率, 参数如下:
BaudIndex:波特率序号,从0到9

int rt=rfidreader.PSAM.YW_SAM_PPSBaud(0);

 

3.6 int YW_SAM_PPSBaud_Ex(byte BaudIndex, byte Protocol))

带参数指定PSAM卡PPS波特率, 参数如下:
BaudIndex:波特率序号,从0到9
Protocol:指定T=0,T=1协议

int rt=rfidreader.PSAM.YW_SAM_PPSBaud_Ex(0,0);

 

4、ID2Card,类名:id2card,功能:操作身份证卡

类:id2card的方法:

4.1 byte[] YW_ChinaIDV2_RequestCardNo()

获取身份证卡的卡号,不是身份证号码

rfidreader.ReaderHardware.YW_SearchCardMode(rfidreader.ReaderHardware.SEARCHCARDMODE_14443B);
byte [] idcardNo=rfidreader.ID2Card.YW_ChinaIDV2_RequestCardNo();

 


1
RFID读写器产品手册下载
2
读写器开发SDK下载
3
点击联系友我科技
4
点击联系友我科技