Numérisation de code QR à l’aide de l’API Mobile Vision d’Android

J’ai suivi ce tutoriel sur la création d’une application Android capable de numériser des codes QR.

Voici le code complet. J’ai ajouté les services Google Play en utilisant une note telle que comstack 'com.google.android.gms:play-services:7.8.0' .

AndroidManifest.xml

               

activity_main.xml

      

MainActivity.java

 package bitinvent.io.qrscanner; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.util.SparseArray; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.TextView; import com.google.android.gms.vision.CameraSource; import com.google.android.gms.vision.Detector; import com.google.android.gms.vision.barcode.Barcode; import com.google.android.gms.vision.barcode.BarcodeDetector; import java.io.IOException; public class MainActivity extends Activity { private SurfaceView cameraView; private TextView barcodeInfo; private CameraSource cameraSource; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cameraView = (SurfaceView) findViewById(R.id.cameraView); barcodeInfo = (TextView) findViewById(R.id.infoTextView); BarcodeDetector detector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.QR_CODE).build(); cameraSource = new CameraSource.Builder(this, detector).setRequestedPreviewSize(640, 480).build(); cameraView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { try { cameraSource.start(cameraView.getHolder()); } catch (IOException e) { Log.e("CAMERA SOURCE", e.getMessage()); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { cameraSource.stop(); } }); detector.setProcessor(new Detector.Processor() { @Override public void release() { } @Override public void receiveDetections(Detector.Detections detections) { final SparseArray barcodes = detections.getDetectedItems(); if (barcodes.size() != 0) { barcodeInfo.post(new Runnable() { @Override public void run() { barcodeInfo.setText(barcodes.valueAt(0).displayValue); } }); } } }); } } 

J’ai testé cela sur un HTC Desire 816 sous Android 4.4.2. Mais cela ne semble pas fonctionner. La vue de la caméra est active mais ne pointe rien quand elle est dirigée vers un code QR. Mais aucune erreur ou crash ne se produit non plus.

Est-ce que je manque quelque chose?

Je suis nouveau dans le développement Android, mais j’ai suivi le tutoriel en utilisant les services de jeu 8.1. Travaillé.

Le code est très similaire au vôtre. Seules les différences sont que j’ai la balise meta au niveau de l’application et que j’ai supprimé .setBarcodeFormats (Barcode.QR_CODE) car cela la limite spécifiquement aux codes de type QR.

Également utilisé l’application en mode paysage puisque Portrait ne fonctionnait pas pour moi. Même en mode paysage pour les codes QR, je devais parfois éloigner lentement le code QR de l’appareil photo jusqu’à ce qu’il soit capable de le reconnaître.

Avez-vous activé la connexion Internet sur l’appareil? Pour télécharger des données via les services Google Play; il nécessite une connexion Internet par le biais de l’appareil, mais vous ne devez fournir aucune autorisation.

Essayez de déplacer la ligne suivante

à votre balise d’activité dans votre manifeste juste après

donc ça ressemblerait à ça

Laisse-moi savoir si ça aide

Finalement, je le fais fonctionner à mes côtés. Je souhaitais partager le processus et le code dont je dispose actuellement pour implémenter le balayage du code QR dans mon application. Je ne réponds pas à votre question. Toutefois, StackOverflow n’a pas trouvé de source d’aide efficace pour mettre en œuvre l’parsing de code QR à l’aide de l’API Google Vision. J’ai examiné le didacticiel que vous avez indiqué dans votre question. Cependant, le tutoriel ne m’a pas été très utile non plus. Par conséquent, je décris les classes et les étapes pour implémenter le balayage de code QR dans mon application.

Tout d’abord, vous aurez besoin de quelques dépendances. Donc, dans votre fichier build.gradle , ajoutez les dépendances suivantes.

 dependencies { comstack 'com.android.support:design:25.3.1' comstack 'com.google.android.gms:play-services-vision:10.2.1' } 

Ensuite, vous devez avoir les cinq classes suivantes dans votre projet. J’ajoute les cours ici. Veuillez importer les classes manquantes si nécessaire.

  1. CameraSource.java
  2. CameraSourcePreview.java
  3. BarcodeCaptureActivity.java
  4. BarcodeGraphicTracker.java
  5. BarcodeTrackerFactory.java

Maintenant, BarcodeCaptureActivity a une disposition que vous devez également placer dans votre dossier de layout .

Voici la disposition barcode_capture.xml dont vous avez besoin.

      

Vous aurez besoin de chaînes et d’une entrée d’activité dans manifeste pour BarcodeCaptureActivity . Voici les chaînes que vous devez insérer dans votre ssortingngs.xml .

  Access to the camera is needed for detection This application cannot run because it does not have the camera permission. The application will now exit. Face detector dependencies cannot be downloaded due to low device storage OK 

Et le AndroidManifest.xml devrait avoir une nouvelle entrée pour BarcodeCaptureActivity comme suit.

  

Maintenant, votre configuration est terminée et vous êtes prêt à ouvrir votre appareil photo pour numériser un code à barres ou un code QR. Appelez simplement la fonction initiateScan suivante si nécessaire.

 public static final int RC_BARCODE_CAPTURE = 9001; public void initiateScan() { Intent intent = new Intent(YourActivity.this, BarcodeCaptureActivity.class); startActivityForResult(intent, RC_BARCODE_CAPTURE); } 

Veuillez noter que vous devez demander l’autorisation de la caméra à l’utilisateur avant d’appeler la fonction initiateScan . En accordant l’autorisation de la caméra, vous appelez la fonction initiateScan .

La fonction initiScan ouvrira le scanner puis, après une numérisation réussie, il retournera à l’ Activity ou au Fragment appelant. Vous devez donc avoir une fonction onActivityResult dans l’ Activity ou le Fragment appelant.

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == CommonStatusCodes.SUCCESS && requestCode == RC_BARCODE_CAPTURE) { if (data == null) return; Barcode barcode = data.getParcelableExtra(BarcodeCaptureActivity.BarcodeObject); final Ssortingng scanResult = barcode.displayValue; if (scanResult == null) return; doSomethingWithTheScanResult(scanResult); } } 

N’oubliez pas d’append l’autorisation CAMERA dans votre fichier AndroidManifest.xml également.

  

J’espère que cela facilitera l’intégration du scanner de code QR à l’aide de l’API Google Vision. J’ai ajouté un projet github pour un exemple d’application d’parsing de code QR. Jetez un coup d’oeil s’il vous plait.