我正在尝试实施一项检测IDTech读卡器的Android活动接受简单的刷卡。
以下是我实施的基本结构,我也从here获得了帮助
代码:
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!");
}
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, byte[] arg1) {
Log.d("UniMag", "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, String arg1) {
Log.d("UniMag","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");
}
}
这里的问题是我只在Logcat中获得这两条消息 来自onReceiveMsgToConnect()
的“Swiper已启动”几秒钟后(可能是20秒)
“超时!”从onReceiveMsgTimeout()发回一个字符串,说无法连接到设备。我有多个IDTech设备,这在每台设备上都是一样的。此外,有时如果我很幸运,我会得到: “读卡器已连接。”来自onReceiveMsgConnected(),这意味着它已连接。但这很少发生。
非常感谢任何帮助。 谢谢!
答案 0 :(得分:1)
好的,所以我让它运转了。 我使用的是旧版本的sdk(unimag.reader.android-1.0.0.jar)和配置xml文件(idt_unimagcfg_default.xml)。我只是将它们更新为最新版本的sdk和xml。
新版本(截至2014年12月) SDK:IDT_UniMagSDKAndroid_v4.4.jar - xml:umcfg.4.4.1.xml
超时问题已解决。
P.S:作为附注,请访问他们的网站,了解您使用的特定卡片刷卡器可能需要的任何设备特定详细信息。 例如:我使用的是#34; Shuttle,双轨安全移动MagStripe读卡器"使用" HTC ONE"电话。继续阅读此页here后,我认为对于HTC ONE,我需要关闭我的" Beats audio"适当地使用这个设备。 我希望这会有所帮助。