2012-12-10 18 views
7

Vorrei implementare un lettore di codici QR/codice a barre all'interno della mia applicazione. Mi piacerebbe sapere quale sia la soluzione più leggera per fare ciò (ignorando l'integratore di intent da zxing).Lettore codice a barre/codice QR per Android

+2

ciò che è sbagliato con l'intento integratore da ZXing? – kjurkovic

+2

non voglio che gli utenti abbandonino l'app per scaricare il lettore di codici a barre, voglio una soluzione all'interno dell'app – user1437481

+0

Zxing fornisce il codice completo, è possibile integrarlo con l'app –

risposta

10

Ho usato zxing per costruire nella mia applicazione. Avrai bisogno di un po 'di codice. Prima di tutto, core.jar, relativo a core/core.jar, nel tuo percorso di build, quindi vai al loro client, a android /..../ com.google.zxing, e ottieni il loro codice (questo non è raccomandato da . gli sviluppatori, perché la vostra copia e incolla) ultimo, aggiungere questo codice:

package com.wtsang02.activities; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.zxing.BarcodeFormat; 
import com.google.zxing.BinaryBitmap; 
import com.google.zxing.ChecksumException; 
import com.google.zxing.FormatException; 
import com.google.zxing.LuminanceSource; 
import com.google.zxing.MultiFormatReader; 
import com.google.zxing.NotFoundException; 
import com.google.zxing.Reader; 
import com.google.zxing.Result; 
import com.google.zxing.ResultPoint; 
import com.google.zxing.common.HybridBinarizer; 


public class QRDecoder extends Activity implements OnClickListener { 

    private String text; 
    private Button webbutton; 
    private Bitmap bmp; 
    private ImageView ivPicture; 
    private TextView textv; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mysales); 
     webbutton = (Button)findViewById(R.id.webbutton); 

     ivPicture = (ImageView) findViewById(R.id.ivPicture); 
     textv= (TextView) findViewById(R.id.mytext); 

     webbutton.setOnClickListener(this); 
    } 

    private void decode() { 


     if (bmp == null) { 
      Log.i("tag", "wtf"); 
     } 
     bmp = bmp.copy(Bitmap.Config.ARGB_8888, true); 

     int[] intArray = new int[bmp.getWidth() * bmp.getHeight()]; 
     bmp.getPixels(intArray, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), 
       bmp.getHeight()); 

     LuminanceSource source = new com.google.zxing.RGBLuminanceSource(
       bmp.getWidth(), bmp.getHeight(), intArray); 
     BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); 
     Reader reader = new MultiFormatReader(); 
     try { 
      Result result = reader.decode(bitmap); 

      text = result.getText(); 
      byte[] rawBytes = result.getRawBytes(); 
      BarcodeFormat format = result.getBarcodeFormat(); 
      ResultPoint[] points = result.getResultPoints(); 
      textv.setText(text); 

     } catch (NotFoundException e) { 

      e.printStackTrace(); 
     } catch (ChecksumException e) { 

      e.printStackTrace(); 
     } catch (FormatException e) { 

      e.printStackTrace(); 

     } 
     Log.i("done", "done"); 
     if(text!=null) 
     Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG).show(); 
     else{ 
      Toast.makeText(getBaseContext(), "QQ", Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    public void onClick(View v) { 

     Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(i, 0); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
      Bundle extras = data.getExtras(); 
      bmp = (Bitmap) extras.get("data"); 
      ivPicture.setImageBitmap(bmp); 
      decode(); 
     } 

    } 

} 

questo codice utilizzare la fotocamera di default del telefono, se avete bisogno di usare il loro cliente, è necessario iniziare la loro CaptureActivity, il layout dovrebbe includere un TextView per mostrare i risultati, ImageView per mostrare l'immagine catturata e Button per avviare la fotocamera. . Questo è basato su 2.1zxing.

+0

ottenere quale codice dal client? Ho frainteso quella parte – user1437481

+0

+1 per mostrare come per creare una nuova app semplice invece di copiare completamente l'app Barcode Scanner. –

+0

ha aggiornato il post, dove dichiaro la posizione. Si trova tutto nel file zip, dove hai scaricato zxing2.1 – wtsang02

0

Ehi, scarica un campione di scanner di codici a barre Biggu da questo link, estrai il progetto demo e importalo in eclissi. Il file zip ha Demo Esempio, che è possibile utilizzare e integrare nella vostra applicazione secondo il vostro requisito

+0

andando a provarlo in un minuto – user1437481

+0

non riesco a scegliere QR o codice a barre solo su questo – user1437481

2

È possibile utilizzare:

Problemi correlati