2014-02-24 93 views
0

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

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

回答

0

下午好,我有一个应用程序,你在找什么?首先,我创建一个意图,所以我可以用我为了使用外部应用程序的任何QR扫描得到的值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的结果发送信息到服务器端,我等待的答案...

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

请让我知道,如果这可以帮助您

+0

我已编辑和张贴我的代码已经存在,但它仍然不能正常工作 –

+0

对不起,延迟的答复...所以它仍然在做同样的事情..它打开扫描仪并关闭inmediatly ...尝试使用另一个QR扫描仪...我建议你使用QR Droid – geekCode

+0

艾特谢谢你的QR Droid工作比ZXIng更好吗? –

0

UPDATE : 我刚开始用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问题。你有没有设置数据库帮助程序? 首先,我会谷歌周围,找到一个简单的数据库示例来设置数据库。有很多很好的例子说明如何在Android的SQLite中设置数据库。我曾经学习过的一些基础知识:http://hmkcode.com/android-simple-sqlite-database-tutorial/。您可以使用Book的示例创建一个产品类,其中包含符合您需求的列的所有值。然后你简单地使用eclipse创建自动getter和setter,点击“Source - > 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结果并调用数据库结果进行比较。希望它的帮助