
该单元附有一个稀缺的文档,SDK中的演示应用程序实现了固件更新和几个对话框,这些实际上是如何实现基本功能(添加到代码中的几个而不是很好的注释).
我已经在基本的活动中实现了接口,并且试图检测该单元何时连接或断开连接,但是似乎监听器将两个事件(连接/断开连接)捕获为“断开连接”,更不用说尝试读取卡.
有没有人在AndroID上使用这个单位,并有一些明确的例子?
顺便说一句,这是我的课:
package com.card.swipe;import java.io.file;import java.io.fileOutputStream;import java.io.inputStream;import IDTech.MSR.uniMag.uniMagReader;import IDTech.MSR.uniMag.uniMagReaderMsg;import androID.app.Activity;import androID.os.Bundle;import androID.util.Log;import androID.vIEw.VIEw;import androID.Widget.TextVIEw;import androID.Widget.Toast;public class CardSwipeTestActivity extends Activity implements uniMagReaderMsg { private uniMagReader myUniMagReader = null; private TextVIEw etCardData; private String _strMSRData = null; private byte[]_MSRData = null; private String _strStatus = null; private int _nGetChallengeResult = 0; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main);// InitializeUI(); InitializeReader(); String strManufacture = myUniMagReader.getInfoManufacture(); String strModel = myUniMagReader.getInfoModel(); String strSDKVerInfo = myUniMagReader.getSDKVersionInfo(); String strOsverInfo = androID.os.Build.VERSION.RELEASE; etCardData = (TextVIEw)findVIEwByID(R.ID.text_vIEw); etCardData.setText("Phone: "+strManufacture+"\n"+"Model: "+strModel+"\n"+"SDK Ver: "+strSDKVerInfo+"\nOS Version: "+strOsverInfo); } @OverrIDe protected voID onPause() { // Todo auto-generated method stub if(myUniMagReader!=null) { //you should stop swipe card and unregister when the application go to background myUniMagReader.stopSwipeCard(); // myUniMagReader.unregisterListen();// myUniMagReader.release(); } super.onPause(); } @OverrIDe protected voID onResume() { // Todo auto-generated method stub // you should register to Listen the headset event when the application resumed.// if(myUniMagReader!=null)// {//// myUniMagReader.registerListen();// if(_bCheckedSaveLogItem==true)// myUniMagReader.setSaveLogEnable(true);// else// myUniMagReader.setSaveLogEnable(false);// }// if(itemStartSC!=null)// itemStartSC.setEnabled(true); // waitingCommandResult=false; super.onResume(); } @OverrIDe protected voID onDestroy() { myUniMagReader.release(); super.onDestroy(); androID.os.Process.killProcess(androID.os.Process.myPID()); } //********************************************************************************// @OverrIDe public boolean getUserGrant(int arg0,String arg1) { // Todo auto-generated method stub return false; } @OverrIDe public voID onReceiveMsgautoConfigProgress(int arg0) { // Todo auto-generated method stub } @OverrIDe public voID onReceiveMsgCardData(byte arg0,byte[] arg1) { // Todo auto-generated method stub Log.d("SWIPE","Card swiped!"); Toast.makeText(getApplicationContext(),"Card swiped!",Toast.LENGTH_SHORT).show(); } @OverrIDe public voID onReceiveMsgCommandResult(int arg0,byte[] arg1) { // Todo auto-generated method stub } @OverrIDe public voID onReceiveMsgConnected() { Log.d("CONNECTION","Swiper Connected"); Toast.makeText(getApplicationContext(),"Swiper Connected!",Toast.LENGTH_SHORT).show(); } @OverrIDe public voID onReceiveMsgdisconnected() { Log.d("CONNECTION","Swiper disconnected"); Toast.makeText(getApplicationContext(),"Swiper disconnected!",Toast.LENGTH_SHORT).show(); } @OverrIDe public voID onReceiveMsgFailureInfo(int arg0,String arg1) { // Todo auto-generated method stub Log.d("CONNECTION","Swiper Failure"); } @OverrIDe public voID onReceiveMsgSDCardDFailed(String arg0) { // Todo auto-generated method stub } @OverrIDe public voID onReceiveMsgTimeout(String arg0) { Log.d("TIMEOUT","Timed out!"); Toast.makeText(getApplicationContext(),"Timed out!",Toast.LENGTH_SHORT).show(); } @OverrIDe public voID onReceiveMsgToConnect() { Log.d("CONNECTION","Swiper Powered Up"); Toast.makeText(getApplicationContext(),"Swiper Powered Up",Toast.LENGTH_SHORT).show(); } @OverrIDe public voID onReceiveMsgToSwipeCard() { Log.d("SWIPE","Ready to swipe!"); Toast.makeText(getApplicationContext(),"Ready to swipe!",Toast.LENGTH_SHORT).show(); } //********************************************************************************// private voID InitializeReader() { if(myUniMagReader==null) myUniMagReader = new uniMagReader(this,this); myUniMagReader.setVerboseLoggingEnable(true); myUniMagReader.registerListen(); //load the XML configuratin file String filenameWithPath = getXMLfileFromraw(); if(!isfileExist(filenameWithPath)) { filenameWithPath = null; } myUniMagReader.setXMLfilenameWithPath(filenameWithPath); myUniMagReader.loadingConfigurationXMLfile(true); myUniMagReader.setTimeoutOfSwipeCard(5); } private boolean isfileExist(String path) { if(path==null) return false; file file = new file(path); if (!file.exists()) { return false ; } return true; } private String getXMLfileFromraw( ){ //the target filename in the application path String filenameWithPath = null; filenameWithPath = "IDt_unimagcfg_default.xml"; try{ inputStream in = getResources().openRawResource(R.raw.IDt_unimagcfg_default); int length = in.available(); byte [] buffer = new byte[length]; in.read(buffer); in.close(); deletefile(filenameWithPath); fileOutputStream fout = openfileOutput(filenameWithPath,MODE_PRIVATE); fout.write(buffer); fout.close(); // to refer to the application path file fileDir = this.getfilesDir(); filenameWithPath = fileDir.getParent() + java.io.file.separator + fileDir.getname(); filenameWithPath = filenameWithPath+java.io.file.separator+"IDt_unimagcfg_default.xml"; } catch(Exception e){ e.printstacktrace(); filenameWithPath = null; } return filenameWithPath; } public voID swipe(VIEw v) { if(myUniMagReader!=null) { myUniMagReader.startSwipeCard(); } if(myUniMagReader.isSwipeCardRunning()==true) { Log.d("SWIPE","Swipe Card Running!"); } } private String getHexStringFromBytes(byte []data) { if(data.length<=0) return null; StringBuffer hexString = new StringBuffer(); String fix = null; for (int i = 0; i < data.length; i++) { fix = Integer.toHexString(0xFF & data[i]); if(fix.length()==1) fix = "0"+fix; hexString.append(fix); } fix = null; fix = hexString.toString(); return fix; } public byte[] getBytesFromHexString(String strHexData) { if (1==strHexData.length()%2) { return null; } byte[] bytes = new byte[strHexData.length()/2]; for (int i=0;i<strHexData.length()/2;i++) { bytes[i] = (byte) Integer.parseInt(strHexData.substring(i*2,(i+1)*2),16); } return bytes; }} (还有一些未实现的方法)
解决方法 这是我与UniMag一起使用的.使用处理程序输出刷新的数据,并使用“滑动”按钮开始滑动.要改善,请等待读卡器报告已连接/准备滑动,然后启用按钮,等待滑动时禁用,并在接收数据后重新启用.import java.util.regex.Matcher;import java.util.regex.Pattern;import IDTech.MSR.XMLManager.StructConfigParameters;import IDTech.MSR.uniMag.uniMagReader;import IDTech.MSR.uniMag.uniMagReaderMsg;import androID.app.Activity;import androID.os.Bundle;import androID.os.Handler;import androID.os.Message;import androID.util.Log;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;import androID.Widget.TextVIEw;public class MainActivity extends Activity implements uniMagReaderMsg { private uniMagReader myUniMagReader = null; private button btnSwipe; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); if(myUniMagReader == null) { myUniMagReader = new uniMagReader(this,this); myUniMagReader.setSaveLogEnable(false); myUniMagReader.setXMLfilenameWithPath(null); myUniMagReader.loadingConfigurationXMLfile(true); //myUniMagReader.setVerboseLoggingEnable(true); myUniMagReader.registerListen(); } btnSwipe = (button) findVIEwByID(R.ID.button1); btnSwipe.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { myUniMagReader.startSwipeCard(); } }); } @OverrIDe public voID onDestroy() { myUniMagReader.stopSwipeCard(); myUniMagReader.unregisterListen(); myUniMagReader.release(); super.onDestroy(); } @OverrIDe public boolean getUserGrant(int arg0,String arg1) { Log.d("UniMag","getUserGrant -- " + arg1); return true; } @OverrIDe public voID onReceiveMsgautoConfigProgress(int arg0) { // Todo auto-generated method stub Log.d("UniMag","onReceiveMsgautoConfigProgress"); } @OverrIDe public voID onReceiveMsgCardData(byte arg0,byte[] arg1) { Log.d("UniMag","onReceiveMsgCardData"); Log.d("UniMag","Successful swipe!"); String strData = new String(arg1); Log.d("UniMag","SWIPE - " + strData); if(myUniMagReader.isSwipeCardRunning()) { myUniMagReader.stopSwipeCard(); } // Match the data we want. String pattern = "%B(\d+)\^([^\^]+)\^(\d{4})"; Log.d("UniMag",pattern); Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(strData); String card = ""; String name = ""; String exp = ""; String data = ""; if(m.find()) { for(int a = 0; a < m.groupCount(); ++a) { Log.d("UniMag",a + " - "+m.group(a)); } card = m.group(1); name = m.group(2); exp = m.group(3); data = "Data: " + name + " -- " + card + " -- " + exp; Log.d("UniMag",data); Message msg = new Message(); msg.obj = data; swipeHandler.sendMessage(msg); } } final Handler swipeHandler = new Handler() { @OverrIDe public voID handleMessage(Message msg) { String text = (String)msg.obj; TextVIEw dataVIEw = (TextVIEw) findVIEwByID(R.ID.text_vIEw); dataVIEw.setText(text); } }; @OverrIDe public voID onReceiveMsgCommandResult(int arg0,"onReceiveMsgCommandResult"); } @OverrIDe public voID onReceiveMsgConnected() { Log.d("UniMag","onReceiveMsgConnected"); Log.d("UniMag","Card reader is connected."); } @OverrIDe public voID onReceiveMsgdisconnected() { Log.d("UniMag","onReceiveMsgdisconnected"); if(myUniMagReader.isSwipeCardRunning()) { myUniMagReader.stopSwipeCard(); } myUniMagReader.release(); } @OverrIDe public voID onReceiveMsgFailureInfo(int arg0,"onReceiveMsgFailureInfo -- " + arg1); } @OverrIDe public voID onReceiveMsgSDCardDFailed(String arg0) { Log.d("UniMag","onReceiveMsgSDCardDFailed -- " + arg0); } @OverrIDe public voID onReceiveMsgTimeout(String arg0) { Log.d("UniMag","onReceiveMsgTimeout -- " + arg0); Log.d("UniMag","Timed out!"); } @OverrIDe public voID onReceiveMsgToConnect() { Log.d("UniMag","Swiper Powered Up"); } @OverrIDe public voID onReceiveMsgToSwipeCard() { Log.d("UniMag","onReceiveMsgToSwipeCard"); } @OverrIDe public voID onReceiveMsgautoConfigCompleted(StructConfigParameters arg0) { Log.d("UniMag","onReceiveMsgautoConfigCompleted"); }} 总结 以上是内存溢出为你收集整理的IDTech Unimag卡片Sweep在Android上全部内容,希望文章能够帮你解决IDTech Unimag卡片Sweep在Android上所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)