78 votes

Android, Comment lire le QR code dans mon application ?

Dans mon application, j'ai besoin de lire le code Qr. J'ai cherché sur le net et j'ai trouvé des codes Zing, mais de nombreux développeurs ont eu du mal à l'utiliser et il semble qu'il soit bogué !

Si je suppose que mes clients ont un lecteur qr installé sur leur appareil, comment puis-je utiliser ces applications et les appeler via des intentions implicites ?

si l'utilisateur n'a pas de lecteur qr, qu'adviendra-t-il de l'application ? s'il plante, puis-je demander à l'utilisateur de télécharger par exemple QrDroid et ensuite de l'utiliser ?

88voto

Seshu Vinay Points 4609
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);

}

et en 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
        }
    }
}

30voto

Amardeep Points 928

Zxing est une excellente bibliothèque pour effectuer la numérisation et la génération de code Qr. L'implémentation suivante utilise la bibliothèque Zxing pour scanner l'image du code QR N'oubliez pas d'ajouter la dépendance suivante dans le build.gradle

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

Activité du scanner de code :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X