2016-03-29 30 views
0

Benim Android application içinde, Barcode tarama işlevselliği yaşıyorum. Bu işlevsellik için Barcodes numaralı telefonu taramak için Android https://github.com/dm77/barcodescanner kütüphanesini kullanıyorum. İyi çalışıyor, Ama eğer projemde sürekli olarak taranırsam, bazen barkodun wrong value(not the actual value)'unu döndürüyor. Bunun neden olduğunu ve bu sorunun nasıl çözüleceğini bilmek isterim. Ben googled ama ne yazık ki daha iyi bir çözüm bulamadım. Herkes sorunu çözmek için bana rehber lütfen.Android Zxing Barkod Tarayıcı doğru şekilde taramıyor

not: kullanıyorum son sürüm 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); 
    } 
} 

cevap

1

Ben kullanılacağını öneririm Zbar (aynı repo'dan). Zxing ile bazı performans sorunları yaşadık ve Zbar'a geçmek zorunda kaldık. Üretimde 2 yıl gibi kullanım - sorun yok.

+0

** Zbar ** 'a bakacağım, Ama ben tüm projeyi ** Zxing ** ile yaptım. ** Zxing ** 'de sorunu düzeltmek için herhangi bir seçenek. – Jamal

+1

@Jamal u, er ya da geç, bunu yapmak zorunda olacak ... – localhost

+0

Teşekkürler localhost, yapacağım. – Jamal

İlgili konular