2014-03-07 118 views
0

我在嘗試之前盡力找到解決方案,但是我似乎無法找到類似的情況。使用ZXing的間歇性QR掃描結果IntentIntegrator

我爲我正在使用的應用程序實現了QR掃描儀。我正在使用zxing庫,特別是使用下面的導入。此外,這些應用程序使用Play商店中的「Barcode Scanner」(我被提示安裝)。

import com.google.zxing.integration.android.IntentIntegrator; 
import com.google.zxing.integration.android.IntentResult; 

問題是掃描儀每3到6次掃描只工作1次。我要麼得到空回報,要麼沒有輸出。它總是返回到我的源屏幕,並從不產生實際的錯誤。

我用這個教程作爲源:Android SDK: Create a Barcode Reader

這裏是mainactivity相關信息:

public void onClick(View v){ 
      //respond to clicks 
      if(v.getId()==R.id.scanQRButton){ 
       //scan 
       IntentIntegrator scanIntegrator = new IntentIntegrator(this); 
       scanIntegrator.initiateScan(); 
       formatTxt.setText("Scan Initiated"); 
       contentTxt.setText(" Scan Results: " + scanContent); 

       if(scanContent != null){ 

        String userid,medname,tabstaken,dob; 


        StringTokenizer st = new StringTokenizer(scanContent, ","); 
         // token 0 
         dob = st.nextToken(); 
         //token 1 
         medname = st.nextToken(); 
         //token 2 
         tabstaken = st.nextToken(); 
         //token 3 
         //rxnumber 

        DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 

        HashMap<String,String> user = new HashMap<String, String>(); 
        user = db.getUserDetails(); 

        //Store the userlog by passing to UserLogEntry 
        userid = user.get("uid"); 
        //debug.setText("Userid: "+ userid+ " medname: " + medname + " tabs: " +tabstaken); 

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



       } 



      } 

     } 

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


} 

而且這裏有斑馬線類從庫包我使用的是:

意圖結果:

https://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentResult.java?r=1273

IntentIntegrator:

https://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java?spec=svn2260&r=2260

如何得到這個工作%的時間100任何想法?

謝謝!

回答

3

所以我嘗試了幾種不同的方式讓掃描儀與zxing一起工作,沒有任何工作。不管我做了什麼,它只是感覺有問題。由於集成了掃描儀,因此它不需要第三方應用程序(如條形碼掃描儀),這是一個很大的麻煩。我決定尋找替代品,並找到ZBar。

如果任何人有任何問題使用zxing進行QR掃描,我建議使用Zbar來代替。代碼本身更簡單。您可以使用zbar頁面上給出的示例,並且幾乎可以將它複製並粘貼到項目中,而不會發生任何更改(或很少)。此外,將其作爲全包式掃描儀進行集成也很簡單。

我在這裏包含了更詳盡的答案。這些信息可以在教程中找到,但是在ZBar頁面中可以找到,但是在我的回答中包含這些信息並沒有什麼壞處。

  1. 首先下載的zip這裏:https://github.com/dm77/ZBarScanner
  2. 然後添加 「ZBarScannerLibrary」 作爲一個現有的Android項目。
  3. 對於ZBarScannerLibrary:右鍵 - >屬性 - > android和檢查「是庫」
  4. 選擇你的項目(你要添加qr掃描儀),右鍵 - >屬性 - > android->添加選擇ZBarScannerLibrary。
  5. 現在添加頁面上給出的ZBar代碼:https://github.com/dm77/ZBarScanner(如下所示是有幫助的。
  6. 享受QR掃描,而不拉出你的頭髮

這裏是一個設有zbar和樣品的主要活動。不要忘記添加相應的行Android清單:

<uses-permission android:name="android.permission.CAMERA"/> 
<uses-feature android:name="android.hardware.camera" /> 

在應用元素中,添加活性聲明:

<activity android:name="com.dm.zbar.android.scanner.ZBarScannerActivity" 
     android:screenOrientation="landscape" 
     android:label="@string/app_name" /> 

我用一個字符串標記,以拉開QR結果和排序他們成爲特定的變量。

package com.dm.zbar.android.examples; 

    import android.app.Activity; 
    import android.content.Intent; 
    import android.content.pm.PackageManager; 
    import android.os.Bundle; 
    import android.text.TextUtils; 
    import android.view.View; 
    import android.widget.Toast; 
    import com.dm.zbar.android.scanner.ZBarConstants; 
    import com.dm.zbar.android.scanner.ZBarScannerActivity; 
    import net.sourceforge.zbar.Symbol; 

    public class MainActivity extends Activity { 

    private static final int ZBAR_SCANNER_REQUEST = 0; 
    private static final int ZBAR_QR_SCANNER_REQUEST = 1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public void launchScanner(View v) { 
     if (isCameraAvailable()) { 
      Intent intent = new Intent(this, ZBarScannerActivity.class); 
      startActivityForResult(intent, ZBAR_SCANNER_REQUEST); 
     } else { 
      Toast.makeText(this, "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public void launchQRScanner(View v) { 
     if (isCameraAvailable()) { 
      Intent intent = new Intent(this, ZBarScannerActivity.class); 
      intent.putExtra(ZBarConstants.SCAN_MODES, new int[]{Symbol.QRCODE}); 
      startActivityForResult(intent, ZBAR_SCANNER_REQUEST); 
     } else { 
      Toast.makeText(this, "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public boolean isCameraAvailable() { 
     PackageManager pm = getPackageManager(); 
     return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      case ZBAR_SCANNER_REQUEST: 
      case ZBAR_QR_SCANNER_REQUEST: 
       if (resultCode == RESULT_OK) { 
        Toast.makeText(this, "Scan Result = " + data.getStringExtra(ZBarConstants.SCAN_RESULT), Toast.LENGTH_SHORT).show(); 
       } else if(resultCode == RESULT_CANCELED && data != null) { 
        String error = data.getStringExtra(ZBarConstants.ERROR_INFO); 
        if(!TextUtils.isEmpty(error)) { 
         Toast.makeText(this, error, Toast.LENGTH_SHORT).show(); 
        } 
       } 
       break; 
     } 
    } 
} 
相關問題