如何在Android中获取iData(移动计算机iData95E)iScan条形码图像?

如何在Android中获取iData(移动计算机iData95E)iScan条形码图像?,android,barcode-scanner,scanning,Android,Barcode Scanner,Scanning,iData iScan是由无锡iData科技有限公司开发的一项技术。 它通过iData内置扫描仪应用程序iScan用于条形码扫描仪 任何人都可以提供任何其他文件或参考。 因此,我可以在扫描后获得条形码数据 感谢您的积极回复。我有用于扫描条形码的iData设备。获取条形码数据非常简单,只需在屏幕上放置一个edittext,将当前焦点设置为edittext,然后使用iData设备扫描条形码,现在您可以看到,在成功扫描条形码后,iData设备默认情况下将条形码编号添加到edittext。旧问题但新答案

iData iScan是由无锡iData科技有限公司开发的一项技术。 它通过iData内置扫描仪应用程序iScan用于条形码扫描仪

任何人都可以提供任何其他文件或参考。 因此,我可以在扫描后获得条形码数据


感谢您的积极回复。

我有用于扫描条形码的iData设备。获取条形码数据非常简单,只需在屏幕上放置一个edittext,将当前焦点设置为edittext,然后使用iData设备扫描条形码,现在您可以看到,在成功扫描条形码后,iData设备默认情况下将条形码编号添加到edittext。

旧问题但新答案。这样,它不需要编辑文本

  • 步骤1(可选,但推荐)
如果需要,使用谷歌翻译。 在那里,您将获得最新的iScan应用程序。此步骤不是必需的,但建议执行。
点击下载链接:

链接:密码:pa4s

您将得到404错误,好的,将url从
pan.baidu.com
重写到
yun.baidu.com
。现在url看起来像这样:
http://yun.baidu.com/s/1bpl50uj
。转到该链接,输入密码并下载应用程序

  • 步骤2
。同样,您必须将地址从
pan
更改为
yun
。输入密码并下载文件

之后,您可以探索该应用程序的来源。您需要
libbarcode.so
from
libs/armeabi/
BarcodeScan.jar
from
libs/

libbarcode.so
必须放入
jniLibs\armeabi
文件夹
BarcodeScan.jar
必须添加为依赖项

这是HardwareControl类

public class HardwareControl implements BarcodeJNI.ScanCallBack {


    static public final int BARCODE_READ = 10;
    private BarcodeJNI barcodeControll;// = new BarcodeJNI(this);
    private String scanResult = "";
    private boolean scanInProgress = false;
    private boolean scanSuccess = false;
    private boolean scannerLoaded = false;
    private boolean iScanRunning = true;
    private final String noIdata = "You are not using iData terminal. Barcode scanner not supported!";

    public HardwareControl(Context context){
        MainActivity.w("HardwareControl constructor");
        try {
            boolean isiScanRunning = isIscanAppRunning(context);
            iScanRunning = isiScanRunning;
            if (isiScanRunning)
            {
                MainActivity.w("HardwareControl constructor. iScan is running. Returning ...");
                return;
            }
            barcodeControll = new BarcodeJNI(context);
            barcodeControll.setmScanCB(this);
            this.scannerLoaded = true;
            MainActivity.w("HardwareControl constructor success!");
        }catch (Throwable ex)
        {
            MainActivity.w("HardwareControl constructor error!", ex);
            barcodeControll = null;
        }
    }

    public boolean isiScanRunning()
    {
        return this.iScanRunning;
    }

    public boolean isScannerLoaded()
    {
        return this.scannerLoaded;
    }

    public void Open() {
        MainActivity.w("HardwareControl open");
        if (barcodeControll == null)
        {
            MainActivity.w(noIdata);
            return;
        }
        barcodeControll.Barcode_open();
        scanInProgress = false;
    }

    public void Close() {
        MainActivity.w("HardwareControl close");
        if (barcodeControll == null)
        {
            MainActivity.w(noIdata);
            return;
        }
        barcodeControll.Barcode_Close();
        MainActivity.w("HardwareControl close scanner success!");
    }

    public void scan_start() {
        MainActivity.w("HardwareControl scan start");
        if (barcodeControll == null)
        {
            MainActivity.w(noIdata);
            return;
        }
        if (!scanInProgress) {

            barcodeControll.Barcode_StartScan();
            scanResult = "";
            scanInProgress = true;
            scanSuccess = false;
        }
    }

    public void scan_stop() {
        if (barcodeControll == null)
        {
            MainActivity.w(noIdata);
            return;
        }
        MainActivity.w("HardwareControl scan stop");
        barcodeControll.Barcode_StopScan();
        scanInProgress = false;
    }

    public String GetScanResult()
    {
        return scanResult;
    }

    public boolean isScanSuccess(){ return scanSuccess; }

    @Override
    public void onScanResults(byte[] bytes) {
        MainActivity.w("HardwareControl onScanResults()");
        if (bytes != null)
        {
            try {
                String res = new String(bytes, "GBK");
                MainActivity.w("Scanned data: [" + res + "]");
                scanResult = res;
                scanSuccess = true;
            }catch (Exception ex)
            {
                MainActivity.w("onScanResults fault: ", ex);
            }
        }
    }

    private boolean isIscanAppRunning(Context ctx)
    {
        boolean ret = false;
        ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningServiceInfo> procInfos =  activityManager.getRunningServices(Integer.MAX_VALUE); //activityManager.getRunningAppProcesses();
        for(int i = 0; i < procInfos.size(); i++) {
            if (procInfos.get(i).service.getClassName().equals("com.android.auto.iscan.iScan_Service")) {
                MainActivity.w("iScan is running..");
                ret = true;
           }
            //MainActivity.w("Service: " + procInfos.get(i).service.getClassName());
        }


        return ret;
    }

}
barcodeControl=newHardwareControl(getApplicationContext())


MainActivity.w()
只是
Log.d()的包装。希望它能帮助某些人:)

如何在没有焦点文本的情况下获取条形码编号?例如,在后台接收服务@希拉格Raval@DomezchociData设备将仅在编辑文本字段中返回条形码编号。我不确定在后台服务中是否收到条形码号码
HardwareControl barcodeControl = null; //global

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_document_open);

    /* barcode scanner part */
    barcodeControl = new HardwareControl(getApplicationContext());

    if (barcodeControl.isiScanRunning())
    {
        /* ask user to turn off iScan app */
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.error);
        builder.setMessage(R.string.iScanIsRunning);
        builder.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        builder.setCancelable(true);
        AlertDialog alert = builder.create();
        alert.show();
    }else {

        if (!barcodeControl.isScannerLoaded()) {
            ShowToast("You are not using iData terminal!", Toast.LENGTH_LONG);
        }
        barcodeControl.Open();
        registerReceiver(_keyReceiver, new IntentFilter("com.idatachina.SCANKEYEVENT"));
    }
    /* end barcode scanner part */
}

@Override
protected void onDestroy() {
    barcodeControl.Close();
    try {
        unregisterReceiver(_keyReceiver);
    } catch (Exception ex)
    {
        MainActivity.w("DocumentOpenActivity.onDestroy() unregisterReceiver failure", ex);
    }
    super.onDestroy();
}


private BroadcastReceiver _keyReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();

        if (action.equals("com.idatachina.SCANKEYEVENT"))
        {
            MainActivity. w("chine scanevent");
            String key_action = intent.getStringExtra("action").toLowerCase();
            String key_code = intent.getStringExtra("code");
            MainActivity.w("key_action = ["+key_action+"], key_code=["+key_code+"]");

            switch (key_action)
            {
                case "down":
                    barcodeControl.scan_start();
                    break;
                case "up":
                    barcodeControl.scan_stop();
                    parseScanInput();
                    break;
                default: MainActivity.w("Unknown key action: " + key_action); break;

            }
        }

        MainActivity.w("broadcast receive action = " + intent.getAction());
    }
};

private void parseScanInput()
{
    if (barcodeControl.isScanSuccess()) {
        String scanResult = barcodeControl.GetScanResult();
        scanResult = scanResult.replaceAll("[\n\r]", "").trim();
        MainActivity.w(String.format("parseScanInput() result: [%s]", scanResult));
        // your app logic here
    }
}