IDTech Unimag卡片Sweep在Android上

IDTech Unimag卡片Sweep在Android上,第1张

概述我已经在 Android(v2.3)上工作了几个星期了,而且我从IDTECH发现了Unimag卡片Swiper的一些问题. 该单元附有一个稀缺的文档,SDK中的演示应用程序实现了固件更新和几个对话框,这些实际上是如何实现基本功能(添加到代码中的几个而不是很好的注释). 我已经在基本的活动中实现了接口,并且试图检测该单元何时连接或断开连接,但是似乎监听器将两个事件(连接/断开连接)捕获为“断开连接” 我已经在 Android(v2.3)上工作了几个星期了,而且我从IDTECH发现了Unimag卡片Swiper的一些问题.

该单元附有一个稀缺的文档,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上所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1134019.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存