Lire et générer un QR Code avec ZXing.NET sous Xamarin

Le balayage de QR Code (ou de Codes Barres) est une fonctionnalité commune dans de nombreuses applications mobiles. Pour vérifier les participants dans un événement ou ouvrir des pages Web à la création d'une chasse au trésor, il existe de nombreux cas d'utilisation.
ZXing.NET Mobile (Zebra crossing) est une bibliothèque open source qui rend la lecture et la création de QR Code aussi simple et sans douleur que possible dans vos applications Xamarin et Xamarin.Forms.

Importation de Zxing

Créez un nouveau projet Xamarin.forms :

Installez la bibliothèque ZXing.NET Mobile à tous vos projets.

Attention à bien installer la version « Mobile » car elle implémente déjà la gestion de la caméra .

Pour chaque plateforme, il y a une configuration requise à avoir pour initialiser ZXing:

Pour Android :

Ajoutez la ligne suivante dans le OnCreate() du MainActivity :

ZXing.Net.Mobile.Forms.Android.Platform.Init();

Et ajoutez la fonction suivante :

 public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
 {
            global::ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults);   
 }

Pour Ios :

Ajoutez la ligne suivante dans le FinishedLaunching() du AppDelegate:

ZXing.Net.Mobile.Forms.Android.Platform.Init();

Pour Windows Phone:

Ajoutez la ligne suivante dans le Constructeur de la main page:

ZXing.Net.Mobile.Forms.WindowsPhone.ZXingScannerViewRenderer.Init();

 

Pour Windows UWP:

Ajoutez la ligne suivante dans le Constructeur de la main page:

ZXing.Net.Mobile.Forms.WindowsUniversal.ZXingScannerViewRenderer.Init();

Lecture d'un Code barre ou d'un QR Code

Voici le code pour créer une vue lisant les Codes barres et les QR Code  :

public class CustomScanPage : ContentPage
    {
        ZXingScannerView zxing;

        public CustomScanPage() : base()
        {
            //initialisation de la View ZsingScanner
            zxing = new ZXingScannerView
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand
            };
            // Dès que le capteur trouve un Qr code, code barre, ...
            zxing.OnScanResult += (result) =>
                Device.BeginInvokeOnMainThread(async () => {
                    // Stop l'analyse 
                    zxing.IsAnalyzing = false;
                    // Ouvre une Pop-up affichant le texte, lien ...
                    await DisplayAlert("Résultat", result.Text, "OK");
                    await Navigation.PopAsync();
                });

            //Création de la Grid
            var grid = new Grid
            {
                VerticalOptions = LayoutOptions.FillAndExpand,
                HorizontalOptions = LayoutOptions.FillAndExpand,
            };
            //Ajout du composant dans la Grid
            grid.Children.Add(zxing);
            Content = grid;
        }
        
        protected override void OnAppearing()
        {
            base.OnAppearing();
            // Scan
            zxing.IsScanning = true;
        }

        protected override void OnDisappearing()
        {
            // Ne scan plus
            zxing.IsScanning = false;
            base.OnDisappearing();
        }
    }

Générer un QR Code

 

Voici le code pour générer un QR Code:

    public class BarcodePage : ContentPage
    {
        public BarcodePage()
        {
            //Initialisation
            ZXingBarcodeImageView barcode  = new ZXingBarcodeImageView
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
            };
            // On choisit le format (cela peut être aussi un code barre)
            barcode.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
            // On renseigne la taille du QR Code
            barcode.BarcodeOptions.Width = 300;
            barcode.BarcodeOptions.Height = 300;
            barcode.BarcodeOptions.Margin = 10;
            // On donne une valeur au QR Code
            barcode.BarcodeValue = "Hello World";

            Content = barcode;
        }
    }

Vous n'avez plus qu'à !

Un commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *