2016-03-29 37 views
0

私のAndroid applicationには、Barcodeのスキャン機能があります。この機能のために、をスキャンするためにAndroid https://github.com/dm77/barcodescannerライブラリを使用しています。それはうまくいっていますが、繰り返しプロジェクトをスキャンすると、時にはバーコードのwrong value(not the actual value)が返されます。なぜ起こっているのか、この問題を解決する方法を知りたいと思います。私はグーグルではありますが、残念ながらもっと良い解決策は見つけられませんでした。Android Zxing Barcode Scannerが正しくスキャンされない

注:私は、最新バージョン1.8.4

SimpleScannerActivity.java

import com.google.zxing.Result; 

import me.dm7.barcodescanner.core.IViewFinder; 
import me.dm7.barcodescanner.core.ViewFinderView; 
import me.dm7.barcodescanner.zxing.ZXingScannerView; 

    public class SimpleScannerActivity extends BaseScannerActivity implements ZXingScannerView.ResultHandler { 
     private ZXingScannerView mScannerView; 

     LoadingFlowScreen loadingFlowScreen; 
     NextScanScreen nextScanScreen; 

     String shipmentin,locationin; 


     @Override 
     public void onCreate(Bundle state) { 
      super.onCreate(state); 
      setContentView(R.layout.activity_simple_scanner); 
      setupToolbar(); 

      loadingFlowScreen = new LoadingFlowScreen(); 
      nextScanScreen = new NextScanScreen(); 



      ViewGroup contentFrame = (ViewGroup) findViewById(R.id.content_frame); 
      mScannerView = new ZXingScannerView(this) { 
       @Override 
       protected IViewFinder createViewFinderView(Context context) { 
        return new CustomViewFinderView(context); 
       } 
      }; 
      contentFrame.addView(mScannerView); 
     } 

     @Override 
     public void onResume() { 
      super.onResume(); 
      mScannerView.setResultHandler(this); 
      mScannerView.startCamera(); 
     } 

     @Override 
     public void onPause() { 
      super.onPause(); 
      mScannerView.stopCamera(); 
     } 

     @Override 
     public void handleResult(Result rawResult) { 


      Intent in = new Intent(SimpleScannerActivity.this, NextScreen.class);//forwaring to another activity once scanned the barcode 
      in.putExtra("scannedText",rawResult.getText());//storing the value in prefernce 
      startActivity(in); 
      finish();    

      mScannerView.resumeCameraPreview(SimpleScannerActivity.this); 

     } 

     private static class CustomViewFinderView extends ViewFinderView { 
      public static final String TRADE_MARK_TEXT = ""; 
      public static final int TRADE_MARK_TEXT_SIZE_SP = 40; 
      public final Paint PAINT = new Paint(); 

      public CustomViewFinderView(Context context) { 
       super(context); 
       init(); 
      } 

      public CustomViewFinderView(Context context, AttributeSet attrs) { 
       super(context, attrs); 
       init(); 
      } 

      private void init() { 
       PAINT.setColor(Color.WHITE); 
       PAINT.setAntiAlias(true); 
       float textPixelSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 
         TRADE_MARK_TEXT_SIZE_SP, getResources().getDisplayMetrics()); 
       PAINT.setTextSize(textPixelSize); 
      } 

      @Override 
      public void onDraw(Canvas canvas) { 
       super.onDraw(canvas); 
       drawTradeMark(canvas); 
      } 

      private void drawTradeMark(Canvas canvas) { 
       Rect framingRect = getFramingRect(); 
       float tradeMarkTop; 
       float tradeMarkLeft; 
       if (framingRect != null) { 
        tradeMarkTop = framingRect.bottom + PAINT.getTextSize() + 10; 
        tradeMarkLeft = framingRect.left; 
       } else { 
        tradeMarkTop = 10; 
        tradeMarkLeft = canvas.getHeight() - PAINT.getTextSize() - 10; 
       } 
       canvas.drawText(TRADE_MARK_TEXT, tradeMarkLeft, tradeMarkTop, PAINT); 
      } 
     } 
    } 

BaseScannerActivity.java

public class BaseScannerActivity extends AppCompatActivity { 
    public void setupToolbar() { 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     final ActionBar ab = getSupportActionBar(); 
     if(ab != null) { 
      ab.setDisplayHomeAsUpEnabled(true); 
     } 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      // Respond to the action bar's Up/Home button 
      case android.R.id.home: 
       finish(); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

答えて

1

私が使用することをお勧めしますを使用していますZbar(同じレポから)。 Zxingでパフォーマンスの問題があり、Zbarに切り替える必要がありました。 2年ほどの生産での使用 - 問題ありません。

+0

私は** Zbar **を見ていきますが、** Zxing **を使ってすべてのプロジェクトを完了しました。 ** Zxing **の問題を解決するオプションはありますか? – Jamal

+1

@ジャマルあなたは遅かれ早かれそれをしなければならないでしょう... – localhost

+0

ありがとうlocalhost、私はします。 – Jamal

関連する問題