Archives mensuelles: March 2016

Programmation Android

Android : Scan de QR code

La bibliothèque ZXing permet de scanner les QR code, mais son ajout dans une application est délicate. De nombreux tutoriels existent, mais ils ne fonctionnent pas tous avec les dernières versions de la bibliothèque et des outils de développement, et posent parfois quelques problèmes (nécessité d’installer une application sur le terminal android, ou ajouter de nouveaux dépôts. L’objectif de ce tutoriel est de proposer une méthode simple et efficace pour scanner les QR-codes dans votre application , et est basée principalement sur https://github.com/dm77/barcodescanner.

Préparation du projet

La première étape est de créer un nouveau projet, avec une activité vide. On configure ensuite les éléments suivants :

  • Ajout de la bibliothèque au projet : file — Project structure — modules — App — dependencies puis cliquez sur le + et ajoutez me.dm7.barcodescanner:zxing
  • Autorisation de la caméra : ajoutez
    <uses-permission android:name="android.permission.CAMERA"/>

    juste avant la balise Application

Mise en page de l’activité

Dans le fichier de layout, il nous faut un TextView (pour afficher le résultat du scan) et composant spécial pour l’affichage de la capture en cours.
Le composant spécial s’ajoute en utilisant CustomView (tout en bas de la liste) et en sélectionnant me.dm7.barcodescanner.zxing.ZXingScannerView.

Nommez le textView textView et la vue camera camView.

Code de l’activité

Le code de l’activité doit gérer le fonctionnement de la caméra. D’habitude, la configuration des vues se fait dans le onCreate, mais ici il faut activitet/désactiver le capteur à chaque fois que l’activité tourne/passe en tache de fond. On utilise donc les méthodes onResume et onPause.

De manière très classique, on configure le composant pour écouter les évènements en plaçant l’activité elle-même comme écouteur.

Voici le code correspondant à ajouter dans l’activité :

    private ZXingScannerView mScannerView;
 
    @Override
    public void onResume() {
        super.onResume();
        mScannerView = (ZXingScannerView) findViewById(R.id.camView);
 
        mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
        mScannerView.startCamera();          // Start camera on resume
    }
 
    @Override
    public void onPause() {
        super.onPause();
        mScannerView.stopCamera();           // Stop camera on pause
    }
 
    @Override
    public void handleResult(Result rawResult) {
        ((TextView) findViewById(R.id.textView)).setText(rawResult.getText());
 
        //Log.v(TAG, rawResult.getText()); // Prints scan results
        //Log.v(TAG, rawResult.getBarcodeFormat().toString()); // Prints the scan format (qrcode, pdf417 etc.)
 
        // If you would like to resume scanning, call this method below:
        mScannerView.resumeCameraPreview(this);
    }

Remarques :

  • Il faut bien sur ajouter les imports correspondants.
  • L’activité doit implémenter l’interface ResultHandler (normalement proposée automatiquement par Android Studio)
  • Si vos identifiants sont différents, il faut adapter le code.
  • Pour déclencher le scan, il faut toucher le code sur l’écran.