Question

iData iScan is a technology which is developed by WUXI IDATA TECHNOLOGY COMPANY LTD. its used for barcode scanner through iData inbuilt Scanner app iScan.

anybody can help for any other documents or reference. so, i can get barcode data after scanning.

Thanks for your positive response.

Was it helpful?

Solution

I have iData Device for scanning barcode. It is very simple to get barcode data, just put one edittext in your screen, set current focus to edittext and now scan the barcode using iData device, Now you can see that after scanning the barcode succssfully iData device add barcode number to edittext by default.

OTHER TIPS

Old question but new answer. This way it works without edittext.

  • Step 1 (optional, but recommended)

Use google translate if required. Go to this page There you will get newest iScan application. This step is not necessary, but recommended.
Click on download link:

Links: http://pan.baidu.com/s/1bpl50uj Password: pa4s

You will get 404 error, ok, rewrite url from pan.baidu.com to yun.baidu.com. Now url looks like this: http://yun.baidu.com/s/1bpl50uj. Go to that link, enter password and download app.

  • Step 2

Go to this page and download BarcodeScanDemo. Again You must change in address from pan to yun. Enter password and download file.

After that You can explore source of that app. You will need libbarcode.so from libs/armeabi/ and BarcodeScan.jar from libs/

libbarcode.so must put in jniLibs\armeabi folder. BarcodeScan.jar must add as dependency.

Here is HardwareControl class

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;
    }

}

Usage in another activity:

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
    }
}

barcodeControl = new HardwareControl(getApplicationContext());

MainActivity.w() is just wrapper of Log.d(). Hope it helps someone :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top