PhoneGap条码扫描器问题

时间:2014-02-24 20:07:40

标签: android eclipse cordova

我正在使用cordova开发应用程序,但Zxing的条形码扫描仪在扫描需要添加扫描/退出按钮和关闭按钮的产品后自动打开和关闭,扫描仪无法自动打开和关闭。我还需要检查扫描的产品是否存在于数据库(SQL SERVER)中并返回产品信息我试图谷歌但无济于事请帮助。以下是我在Eclipse中的代码。我需要知道如何修改UI并添加我自己的ZXING条码扫描器插件控件我在Eclipse中开发并在IIS中托管了一个web api服务,我可以访问我的Android App.Please尽快或告诉我如何我可以修改此条形码UI以添加我的控件。

public void scan() {
    Intent intentScan = new Intent(SCAN_INTENT);
    intentScan.addCategory(Intent.CATEGORY_DEFAULT);

    this.cordova.startActivityForResult((CordovaPlugin) this, intentScan, REQUEST_CODE);
}

我的OnStartActivity代码在这里是代码,但它看起来和你的一样。

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            JSONObject obj = new JSONObject();
            try {
                obj.put(TEXT, intent.getStringExtra("SCAN_RESULT"));
                obj.put(FORMAT, intent.getStringExtra("SCAN_RESULT_FORMAT"));
                obj.put(CANCELLED, false);
            } catch (JSONException e) {
                Log.d(LOG_TAG, "This should never happen");
            }
            //this.success(new PluginResult(PluginResult.Status.OK, obj), this.callback);
            this.callbackContext.success(obj);
        } else if (resultCode == Activity.RESULT_CANCELED) {
            JSONObject obj = new JSONObject();
            try {
                obj.put(TEXT, "");
                obj.put(FORMAT, "");
                obj.put(CANCELLED, true);
            } catch (JSONException e) {
                Log.d(LOG_TAG, "This should never happen");
            }
            //this.success(new PluginResult(PluginResult.Status.OK, obj), this.callback);
            this.callbackContext.success(obj);
        } else {
            //this.error(new PluginResult(PluginResult.Status.ERROR), this.callback);
            this.callbackContext.error("Unexpected error");
        }
    }
}

2 个答案:

答案 0 :(得分:0)

下午好我有一个应用程序,你正在寻找...首先我创建一个意图所以我可以使用任何QR扫描仪我使用外部应用程序,以获得这里的二维码的价值。

 public void scanNow(View view) {
    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
    intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
    startActivityForResult(intent, 0);
}

所以在我的onStartActivity for result中将该信息发送到服务器端并等待答案......

 public void onActivityResult(int requestCode, int resultCode, Intent intent){
    if(requestCode == 0){
        if(resultCode == RESULT_OK){
            contents = intent.getStringExtra("SCAN_RESULT");// here is the content of the qr scanner
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            String messLoc = "Visita Guardada Con Exito";
            Log.i("xZing", "contents: " + contents + " format: " + format);// Handle successful scan
            Toast.makeText(this, messLoc, Toast.LENGTH_LONG).show();
            new Thread(new Task()).start(); // here I start the thread for the connection 
            return;
        }
        else if(resultCode == RESULT_CANCELED);{// Handle cancel
        Log.i("xZing", "Cancelled");
        }
    }
}

请告诉我这是否有帮助

答案 1 :(得分:0)

<强>更新 我刚开始使用Zbar而不是Zxing。使用起来要容易得多。非常容易嵌入(没有第三方应用程序的扫描仪)。它有很多让文件加载到项目中。此外,它还有一个包含的示例,您可以将其复制并粘贴到代码中。该示例非常适合您要执行的操作,并且只需要进行一些编辑即可获得您正在寻找的功能。所以尝试使用zbar库。 Zbar - https://github.com/dm77/ZBarScanner 教程 - http://community.magicsoftware.com/en/library?book=en/Magicxpa/&page=Android_Barcode_Scanning_(Using_ZBar_SDK)_Sample.htm 该教程不是很好,但它有助于设置它。注意:如果单击它们,它们所使用的链接将不起作用。您必须将文本复制并粘贴到浏览器中。 我在下面解释的数据库内容仍然是相关的,但忽略了关于zxing的部分。

祝你好运!

原始回答 我或许可以帮助你解决SQL问题。你有任何数据库助手设置? 首先,我会google并找到一个简单的数据库示例来设置数据库。有很多好的,向您展示如何在SQLite for android中设置数据库。我曾经学过的一些基础知识:http://hmkcode.com/android-simple-sqlite-database-tutorial/。您可以使用Book的示例创建一个产品类,其中包含符合您需求的列的所有值。然后你只需用eclipse创建自动getter和setter点击“Source - &gt; generate getters and setters”。完成后,您可以使用下面的教程设置qr扫描仪。至于保持窗户打开,我认为你不需要这样做。只需创建扫描仪关闭的活动即可。在该活动中,您可以获得输出并将扫描结果与数据库进行比较。

我能够使用教程http://%20http://code.tutsplus.com/tutorials/android-sdk-create-a-barcode-reader--mobile-17162将zxing集成到我的应用中。一旦我这样做了

从qr代码解析数据的示例:

首先调用扫描:

public void onClick(View v){
            //respond to clicks
            if(v.getId()==R.id.scanQRButton){
                //scan
                IntentIntegrator scanIntegrator = new IntentIntegrator(this);
                scanIntegrator.initiateScan();
                Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
                startActivityForResult(intent, 0);

扫描结果代码如下所示:

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    //retrieve scan result
    IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);



    if (scanningResult != null) {
        //we have a result
        scanContent = scanningResult.getContents();



    }
    else{
        Toast toast = Toast.makeText(getApplicationContext(), 
            "No scan data received!", Toast.LENGTH_SHORT);
        toast.show();
    }
}

现在是扫描按钮的整理方法:

public void onClick(View v){
            //respond to clicks
            if(v.getId()==R.id.scanQRButton){
                //scan
                IntentIntegrator scanIntegrator = new IntentIntegrator(this);
                scanIntegrator.initiateScan();
                Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
                startActivityForResult(intent, 0);


                formatTxt.setText( "Scan Initiated");
                contentTxt.setText(" Scan Results: " + scanContent);

                if(scanContent != null){

                    String userid,medname,tabstaken,dob;

                                    // Here I am breaking apart the scan results and 
                                   //saving them into variables. 
                             //Do this then call the database for your product and compare
                    StringTokenizer st = new StringTokenizer(scanContent, ",");
                         // token 0
                         dob = st.nextToken();
                         //token 1
                         medname = st.nextToken();
                         //token 2
                         tabstaken = st.nextToken();
                         //token 3
                         //rxnumber
                    // So here you setup the db so you can access it
                    DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                //This is used to call the results
                    HashMap<String,String> user = new HashMap<String, String>();
                           //Use a method such as getProductResults() for your case
                    user = db.getUserDetails();
enter code here

                    //An example of me storing the user
                    userid = user.get("uid");
                    //debug.setText("Userid: "+ userid+ " medname: " + medname + " tabs: " +tabstaken);

                    UserLogEntry userlog = new UserLogEntry(getApplicationContext(),userid,medname,tabstaken);
                    userlog.addUserLog();

                }   
            }
        }

如果您需要查看我的数据库类,请告诉我。显然,这不是您需要的确切代码,但它向您展示了如何使用QR的结果并调用DB结果进行比较。希望它有用