Smartcard javaemvreader android示例代码

Smartcard javaemvreader android示例代码,smartcard,emv,Smartcard,Emv,我正在尝试构建一个android应用程序,从Micro USB智能卡读卡器读取信用卡/智能卡数据。 当我从google play使用此应用程序时,它可以使用我的读卡器成功读取所有卡片数据: 根据开发者的网站,他们使用此库构建此应用程序: 不幸的是,我试图使用其中的代码,但我得到了终端异常: sasc.terminal.TerminalException:没有可用的提供程序 我的代码如下所示: 受保护的空testSCReader{ 智能卡智能卡=空; CardConnection conn=

我正在尝试构建一个android应用程序,从Micro USB智能卡读卡器读取信用卡/智能卡数据。 当我从google play使用此应用程序时,它可以使用我的读卡器成功读取所有卡片数据:

根据开发者的网站,他们使用此库构建此应用程序:

不幸的是,我试图使用其中的代码,但我得到了终端异常:

sasc.terminal.TerminalException:没有可用的提供程序

我的代码如下所示:

受保护的空testSCReader{ 智能卡智能卡=空; CardConnection conn=null; 试一试{ conn=TerminalUtil.connectTerminalUtil.State.CARD_当前; ifconn==null{ rawT.appendTerminalUtil.connect返回null; 回来 } SessionProcessingEnv=新的SessionProcessingEnv; env.setReadMasterFiletrue; 环境:Setprobealknownaidstrue; CardSession CardSession=CardSession.createSessionconn,env; 智能卡=cardSession.initCard; EMVSession会话=EMVSession.startsession智能卡,康涅狄格州; 会议.背景; 对于EmvaApplication应用程序:smartCard.GetEmvaApplication{ session.selectApplicationapp; session.initiateApplicationProcessing;//获取处理选项+读取记录 如果!应用程序ISInitializedOnic{ //如果GPO失败可能不是EMV卡或不满足条件,则跳过 持续 } //设置此选项时要非常小心,因为如果PIN Try计数器达到0,它将阻止应用程序 //必须与PIN回调处理程序结合使用 EMVTerminal.setDoVerifyPinIfRequiredfalse; session.prepareTransactionProcessing; //检查事务处理是否跳过了某些步骤 ifapp.getATC==-1 | | app.getLastOnlineATC==-1{ session.testReadATCData;//ATC,最后一次联机ATC } //如果PIN Try计数器尚未读取,请尝试读取它 ifapp.getPINTryCounter==-1{ session.readPINTryCounter; } 如果!app.isTransactionLogProcessed{ session.checkForTransactionLogRecords; } //testGetChallenge查看应用程序是否支持生成不可预测的数字 session.testGetChallenge; } System.out.println\n; System.out.PrintLn成品处理卡。; System.out.PrintLNow以更可读的形式转储卡数据:; System.out.println\n; 已完成的加工卡。; //见最后一条 }捕捉终端{ 例如printStackTraceSystem.err; rawT.appendex.toString; }捕获未支持的异常{ System.err.println不支持的卡:+ex.getMessage; rawT.appendex.toString; 如果conn!=null{ //System.err.printlnATR:+Util.prettyPrintHexNoWrapconn.getATR; System.err.printlnATR_DB.searchATRconn.getATR; } }捕获智能卡异常{ 例如printStackTraceSystem.err; rawT.appendex.toString; }最后{ 如果conn!=null{ 试一试{ conn.disconnecttrue; }捕鼠器{ 例如printStackTraceSystem.err; } } 如果智能卡!=null{ 试一试{ /*int缩进=0; Log.dFHD_DBG,===============================================================; Log.dFHD_DBG,[智能卡]; Log.dFHD_DBG,===============================================================; 智能卡.dumpLog.d,缩进; Log.dFHD_DBG,-------------; Log.dFHD_DBG,已完成; Log.dFHD_DBG,-------------; //Log.getPrintWriter.flush*/ rawT.appendsmartCard.toString; }捕获运行时异常{ 例如printStackTraceSystem.err; } Log.dFHD_DBG,; }否则,如果conn!=null{ rawT.appendnew sasc.iso7816.ATRconn.getATR.toString; } }
} 我收到了同样的问题,java.lang.ClassNotFoundException:javax.smartcardio.TerminalFactory。 这是因为javax.smartcardio.*在android java编译器附带的java环境中不可用,它在JRE中可用。

实际上是toda
我发现主要的问题是,由于某种原因,它无法在javax.smartcardio.TerminalFactory库中找到类,因此存在ClassNotFound异常。奇怪的是,我确实包含了JDK1.7库,其中包含javax.smartcardio库,但编译器仍然看不到它???有人能解释一下吗?运气好吗?我发现这个应用程序在里面正好使用了这个库,还有一些在存储库中不可用的类。它可以在Nexus5 6.0.1+USB OTG阅读器上工作。