2012-01-12 13 views
36

Nella mia applicazione ho bisogno di leggere il codice Qr. Ho cercato la rete e ho trovato i codici Zing, tuttavia molti sviluppatori hanno avuto problemi ad usarlo e sembra che sia bacato!Android, Come leggere il codice QR nella mia applicazione?

Se presumo che i miei clienti abbiano installato il qr reader sul loro dispositivo, come posso utilizzare tali applicazioni e chiamarle tramite intenti impliciti?

se l'utente non ha alcun lettore qr, cosa accadrà all'applicazione? se si blocca, posso chiedere all'utente di scaricare ad esempio QrDroid e dopo averlo usato?

risposta

55
try { 

    Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
    intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); // "PRODUCT_MODE for bar codes 

    startActivityForResult(intent, 0); 

} catch (Exception e) { 

    Uri marketUri = Uri.parse("market://details?id=com.google.zxing.client.android"); 
    Intent marketIntent = new Intent(Intent.ACTION_VIEW,marketUri); 
    startActivity(marketIntent); 

} 

e in onActivityResult():

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 0) { 

     if (resultCode == RESULT_OK) { 
      String contents = data.getStringExtra("SCAN_RESULT"); 
     } 
     if(resultCode == RESULT_CANCELED){ 
      //handle cancel 
     } 
    } 
} 
+0

questo codice per la scansione del codice a barre o del codice QR ..? –

+0

sì. Utilizza l'applicazione Zxing per scanner di codici a barre per fare ciò –

+0

Piccolo errore: hai aggiunto un extra L a "annullato" –

2

Utilizzare una libreria QR come ZXing ... Ho avuto un'esperienza molto buona con esso, QrDroid è molto bugger. Se devi fare affidamento su un lettore esterno, affidati a uno standard come Google Goggles!

5

ho creato un semplice esempio tutorial. Puoi leggerlo e usarlo nella tua applicazione.

http://ribinsandroidhelper.blogspot.in/2013/03/qr-code-reading-on-your-application.html

Attraverso questo link è possibile scaricare il progetto di libreria QRCode e importare nel vostro spazio di lavoro e aggiungere biblioteca al progetto

e copiare il codice per la vostra attività

Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
startActivityForResult(intent, 0); 

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      String contents = intent.getStringExtra("SCAN_RESULT"); 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
      Toast.makeText(this, contents,Toast.LENGTH_LONG).show(); 
      // Handle successful scan 
     } else if (resultCode == RESULT_CANCELED) { 
      //Handle cancel 
     } 
    } 
} 
+0

Ciao, puoi espandere la tua risposta? Le risposte al solo collegamento vicino non sono utili se il collegamento viene interrotto. – orique

+0

hi la mia risposta è stata modificata puoi passare attraverso questo e dovresti guardare il link dell'URL nella risposta –

+0

Dice che il file è deprecato – Eenvincible

14

se l'utente non ha un lettore qr, cosa accadrà all'applicazione? se si blocca, posso chiedere all'utente di scaricare ad esempio QrDroid e dopo averlo usato?

È interessante notare che Google ha ora introdotto Mobile Vision APIs, sono integrati nei servizi di gioco stesso.

Nel file Gradle Basta aggiungere:

compile 'com.google.android.gms:play-services-vision:9.6.1' 

tratti da questo QR code tutorial.

+0

Ciò richiede che i servizi Google siano installati sul dispositivo di destinazione, che non tutti i telefoni hanno. –

9

Zxing è un'eccellente libreria per eseguire la scansione e la generazione del codice Qr. La seguente implementazione utilizza la libreria ZXing per eseguire la scansione l'immagine del codice QR Non dimenticate di aggiungere in seguito dipendenza nel build.gradle

compile 'me.dm7.barcodescanner:zxing:1.9' 

Codice attività dello scanner:

public class QrCodeScanner extends AppCompatActivity implements ZXingScannerView.ResultHandler { 
    private ZXingScannerView mScannerView; 

    @Override 
    public void onCreate(Bundle state) { 
     super.onCreate(state); 
     // Programmatically initialize the scanner view 
     mScannerView = new ZXingScannerView(this); 
     // Set the scanner view as the content view 
     setContentView(mScannerView); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     // Register ourselves as a handler for scan results. 
     mScannerView.setResultHandler(this); 
     // Start camera on resume 
     mScannerView.startCamera(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     // Stop camera on pause 
     mScannerView.stopCamera(); 
    } 

    @Override 
    public void handleResult(Result rawResult) { 
     // Do something with the result here 
     // Prints scan results 
     Logger.verbose("result", rawResult.getText()); 
     // Prints the scan format (qrcode, pdf417 etc.) 
     Logger.verbose("result", rawResult.getBarcodeFormat().toString()); 
     //If you would like to resume scanning, call this method below: 
     //mScannerView.resumeCameraPreview(this); 
     Intent intent = new Intent(); 
     intent.putExtra(AppConstants.KEY_QR_CODE, rawResult.getText()); 
     setResult(RESULT_OK, intent); 
     finish(); 
    } 
} 
+1

questo codice è nell'applicazione, questa dovrebbe la risposta accettata – matheszabi

+1

ho schermo bianco quando avvio attività QRcode – kemdo

+0

Se si ottiene uno schermo bianco, provare " "nella sezione di AndroidManifest.xml, come descritto all'indirizzo https://github.com/dm77/barcodescanner. – jorgen

0

In studio Android, è possibile utilizzare soffietto processo per creare & Leggi QR immagine del codice & assomigliare bellw enter image description here

  1. Creazione di un progetto Android Studio vuoto
  2. Aggiungi libreria nell'app.Gradle

    compile 'com.google.zxing:core:3.2.1' 
    compile 'com.journeyapps:zxing-android-embedded:[email protected]' 
    
  3. In activity.main uso xml muggito ..

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.enamul.qrcode.MainActivity"> 
    
    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_margin="20dp" 
        android:orientation="vertical"> 
    
    
    <EditText 
        android:id="@+id/editText" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center" 
        android:hint="Enter Text Here" /> 
    
    <Button 
        android:id="@+id/button" 
        android:layout_width="fill_parent" 
        android:layout_height="50dp" 
        android:layout_below="@+id/editText" 
        android:text="Click Here TO generate qr code" 
        android:textAllCaps="false" 
        android:textSize="16sp" /> 
    
    
    <Button 
        android:id="@+id/btnScan" 
        android:layout_width="fill_parent" 
        android:layout_height="50dp" 
        android:layout_below="@+id/editText" 
        android:text="Scan Your QR Code" 
        android:textAllCaps="false" 
        android:textSize="16sp" /> 
    
    <TextView 
        android:id="@+id/tv_qr_readTxt" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" /> 
    
    
    <ImageView 
        android:id="@+id/imageView" 
        android:layout_width="match_parent" 
        android:layout_height="200dp" 
        android:layout_below="@+id/button" 
        android:src="@android:drawable/ic_dialog_email" /> 
    
    
    </LinearLayout> 
    
    </LinearLayout> 
    
  4. In MainActivity è possibile utilizzare il codice muggito

    public class MainActivity extends AppCompatActivity { 
        ImageView imageView; 
        Button button; 
        Button btnScan; 
        EditText editText; 
        String EditTextValue ; 
        Thread thread ; 
        public final static int QRcodeWidth = 350 ; 
        Bitmap bitmap ; 
    
        TextView tv_qr_readTxt; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    
        imageView = (ImageView)findViewById(R.id.imageView); 
        editText = (EditText)findViewById(R.id.editText); 
        button = (Button)findViewById(R.id.button); 
        btnScan = (Button)findViewById(R.id.btnScan); 
        tv_qr_readTxt = (TextView) findViewById(R.id.tv_qr_readTxt); 
    
    button.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
    
    
    
         if(!editText.getText().toString().isEmpty()){ 
          EditTextValue = editText.getText().toString(); 
    
          try { 
           bitmap = TextToImageEncode(EditTextValue); 
    
           imageView.setImageBitmap(bitmap); 
    
          } catch (WriterException e) { 
           e.printStackTrace(); 
          } 
         } 
         else{ 
          editText.requestFocus(); 
          Toast.makeText(MainActivity.this, "Please Enter Your Scanned Test" , Toast.LENGTH_LONG).show(); 
         } 
    
         } 
        }); 
    
    
    btnScan.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
    
         IntentIntegrator integrator = new IntentIntegrator(MainActivity.this); 
         integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES); 
         integrator.setPrompt("Scan"); 
         integrator.setCameraId(0); 
         integrator.setBeepEnabled(false); 
         integrator.setBarcodeImageEnabled(false); 
         integrator.initiateScan(); 
    
        } 
        }); 
        } 
    
    
    Bitmap TextToImageEncode(String Value) throws WriterException { 
        BitMatrix bitMatrix; 
        try { 
        bitMatrix = new MultiFormatWriter().encode(
          Value, 
          BarcodeFormat.DATA_MATRIX.QR_CODE, 
          QRcodeWidth, QRcodeWidth, null 
        ); 
    
        } catch (IllegalArgumentException Illegalargumentexception) { 
    
        return null; 
        } 
        int bitMatrixWidth = bitMatrix.getWidth(); 
    
        int bitMatrixHeight = bitMatrix.getHeight(); 
    
        int[] pixels = new int[bitMatrixWidth * bitMatrixHeight]; 
    
        for (int y = 0; y < bitMatrixHeight; y++) { 
         int offset = y * bitMatrixWidth; 
    
        for (int x = 0; x < bitMatrixWidth; x++) { 
    
         pixels[offset + x] = bitMatrix.get(x, y) ? 
           getResources().getColor(R.color.QRCodeBlackColor):getResources().getColor(R.color.QRCodeWhiteColor); 
         } 
        } 
        Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444); 
    
        bitmap.setPixels(pixels, 0, 350, 0, 0, bitMatrixWidth, bitMatrixHeight); 
        return bitmap; 
    } 
    
    
    
    
        @Override 
        protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
        if(result != null) { 
        if(result.getContents() == null) { 
         Log.e("Scan*******", "Cancelled scan"); 
    
        } else { 
         Log.e("Scan", "Scanned"); 
    
         tv_qr_readTxt.setText(result.getContents()); 
         Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); 
        } 
        } else { 
         // This is important, otherwise the result will not be passed to the fragment 
        super.onActivityResult(requestCode, resultCode, data); 
        } 
        } 
    } 
    
  5. È possibile scaricare il codice sorgente completo da GitHub. Il collegamento GitHub è: https://github.com/enamul95/QRCode

Problemi correlati