IDTech Unimag Card Swiper на Android | Тайм-аут

Я пытаюсь реализовать Android-активность, которая обнаруживает, что считыватель карт IDTech принимает простое считывание карт.

Ниже представлена ​​структура моей реализации, для которой я также получил помощь.

Код:

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 "Swiper включен" от onReceiveMsgToConnect()

И через несколько секунд (может быть, 20 секунд)

"Время вышло!" от onReceiveMsgTimeout(), который отправляет обратно строку с сообщением о невозможности подключения к устройству. У меня есть несколько устройств IDTech, и это происходит одинаково на каждом устройстве. Кроме того, иногда, если мне повезет, я получаю: "Устройство чтения карт подключено". от onReceiveMsgConnected(), что означает, что это связано. Но это случается очень редко.

Любая помощь будет принята с благодарностью. Спасибо!

1 ответ

Решение

Хорошо, я получил это работает. Я использовал более старую версию SDK (unimag.reader.android-1.0.0.jar) и конфигурационный XML-файл (idt_unimagcfg_default.xml). Я просто обновил их до самой последней версии SDK и XML.

Новые версии (по состоянию на декабрь 2014 года) SDK: IDT_UniMagSDKAndroid_v4.4.jar - xml: umcfg.4.4.1.xml

И проблема тайм-аута решена.

PS: просто в качестве дополнительного примечания, пожалуйста, также посетите их веб-сайт для получения подробной информации об устройстве, которая может вам понадобиться для конкретного устройства для подбора карт, которое вы используете. Например: я использовал "Мобильный считывающий считыватель MagStripe с двумя дорожками" и телефоном "HTC ONE". Перейдя на эту страницу, я понял, что для HTC ONE мне нужно отключить "Beats audio", чтобы правильно использовать это устройство. Надеюсь, это поможет.

Другие вопросы по тегам