Intégrer la bibliothèque ZXing sans utiliser l'application Barcode Scanner [double]

StackOverflow https://stackoverflow.com/questions/4854442

  •  27-10-2019
  •  | 
  •  

Question

Quelle est la meilleure façon d'intégrer la bibliothèque ZXing pour fournir un balayage sans avoir l'application Barcode Scanner installé? Je cherche à l'intégrer dans Android sans avoir à demander à l'utilisateur des installations supplémentaires. (Similaire à la façon dont les œuvres de l'iPhone).

Était-ce utile?

La solution

Il est vraiment plus facile d'intégrer simplement par intention. Plus fiable, et vous obtenez automatiquement mises à jour. Bien que je ne le conseille pas ...

Le code source complet est disponible à partir du projet ZXing . Vous voulez construire core.jar de core/ et mettez dans votre dossier Android lib/ pour inclure le décodeur de base dans votre application. Vous ne voulez pas inclure javase. Vous pouvez regarder le code dans android/ comme il est la source de Barcode Scanner, mais comme les auteurs que nous vous suggérerais pas seulement copier et la coller.

Il est Apache licence qui signifie que vous pouvez l'utiliser librement, aussi longtemps que vous donnez essentiellement l'accès des utilisateurs aux termes de la licence.

Autres conseils

Android QR / Barcode / multiformat décodeur.

J'ai fait une application Android en utilisant les API ZXing et intégré uniquement le code de décodage dans mon application. L'entrée à ce décodeur a été donnée par la carte SD de l'émulateur Android.

Voici les étapes:

  1. D'abord, je créé un AVD (émulateur) la version 4 dans mon IDE Eclipse avec la carte SD et la caméra Caractéristiques sous tension.

  2. Ensuite, je l'ai créé une carte SD en utilisant les commandes ci-dessous dans l'invite de commande:

    c:\>mksdcard 40M mysdcard.iso
    

où 40M est la taille de la carte SD que j'ai created..This sera enregistré dans le lecteur C:. Remarque, la partie .iso est important.

  1. Ensuite, nous devons monter la carte SD dans l'émulateur en utilisant les commandes ci-dessous dans l'invite de commande:

     c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
    

Ici myavd4 est le nom de l'émulateur / Android périphérique virtuel que j'ai créé à l'étape 1. Le signe « @ » avant le nom AVD est trop importante.

Gardez l'émulateur en cours d'exécution tous les time..If il se ferme, il faut refaire ce qui précède 3 étapes.

  1. On peut pousser le code QR ou d'autres images de code que nous avons à cette carte SD montée sur notre émulateur en utilisant les commandes ci-dessous dans l'invite de commande:

    c:\>adb push "c:\myqrcode.png" /sdcard
    
  2. Ensuite, dans l'IDE Eclipse, démarrer un nouveau projet Android. Le code ci-dessous doit être collé dans le fichier QRDecoder.java de notre projet.

    package com.example.palani;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.TextView;
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.BinaryBitmap;
    import com.google.zxing.ChecksumException;
    import com.google.zxing.FormatException;
    import com.google.zxing.LuminanceSource;
    import com.google.zxing.MultiFormatReader;
    import com.google.zxing.NotFoundException;
    import com.google.zxing.Reader;
    import com.google.zxing.Result;
    import com.google.zxing.ResultPoint;
    import com.google.zxing.client.androidtest.RGBLuminanceSource;
    import com.google.zxing.common.HybridBinarizer;
    public class QRDecoder extends Activity implements OnClickListener {
        public static class Global
        {
            public static String text=null;
        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Bitmap bMap = BitmapFactory.decodeFile("/sdcard/myqrcode.png");
            TextView textv = (TextView) findViewById(R.id.mytext);
            View webbutton=findViewById(R.id.webbutton);
            LuminanceSource source = new RGBLuminanceSource(bMap); 
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            Reader reader = new MultiFormatReader();
            try {
                 Result result = reader.decode(bitmap);
                 Global.text = result.getText(); 
                    byte[] rawBytes = result.getRawBytes(); 
                    BarcodeFormat format = result.getBarcodeFormat(); 
                    ResultPoint[] points = result.getResultPoints();
                    textv.setText(Global.text);
                    webbutton.setOnClickListener(this);
            } catch (NotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ChecksumException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (FormatException e) {
                // TODO Auto-generated catch block
        e.printStackTrace();
    
    
            }   
        }
    
        @Override
        public void onClick(View v) {
            Uri uri = Uri.parse(Global.text); 
            Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
            startActivity(intent);
    
        }
    
    }
    
  3. Ensuite, je téléchargé le code source ZXing (ZXing-1.6.zip) à partir du lien ci-dessous.

    http://code.google.com/p/zxing/downloads/list
    

Ensuite, extrayez cela et à naviguer D: \ ZXing-1.6 \ core \ src \ com

copier le dossier et collez com dans notre package dans Eclipse.

(Remarque, faites un clic droit sur le paquet de notre projet et coller ... si elle demande pour remplacer le dossier existant, sélectionnez oui)

  1. Ensuite, copier et coller le code dans la ci-dessous res / layout / fichier main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="20dip"
        >
    
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    
    android:textColor="@color/mbackground1"
    android:gravity="center_horizontal"
    android:text="@string/decode_label"
    android:padding="20dip" 
    />
    
    <TextView
    android:id="@+id/mytext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:background="@color/mbackground2" 
    android:textColor="@color/mytextcolor" 
    android:padding="20dip"
    />
    
    
     <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/continue_label"
    android:gravity="center_horizontal"
    android:textColor="@color/mytextcolor"
    android:padding="20dip"
    />
    
    <Button 
    android:id="@+id/webbutton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/web_button"
    android:textColor="@color/mytextcolor"
    />
    
    </LinearLayout>
    
  2. Ensuite, copiez et collez le code dans la ci-dessous res / valeurs / fichier strings.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, QRDecoder!</string>
        <string name="app_name">QRDecoder</string>
        <string name="continue_label">Click below to load the URL!!</string>
        <string name="web_button">Load the URL!!</string>
        <string name="decode_label">Decoded URL</string>
    
    </resources>
    
  3. Ensuite, copiez et collez le code dans la ci-dessous res / valeurs / fichier color.xml, si elle n'existe pas, en créer un.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="mbackground1">#7cfc00</color>
    <color name="mbackground2">#ffff00</color>
    <color name="mytextcolor">#d2691e</color>
    </resources>
    
  4. Ensuite, copier et coller le code dans ci-dessous le fichier manifeste après la balise d'ouverture

    <manifest>
    
    
    <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />      
    
  5. Ainsi, ces étapes ci-dessus fait ... notre application est prête. Maintenant, u peut exécuter l'application et il sera u donner le résultat décodée de l'image d'entrée, nous avons donné.

  6. Pour modifier l'entrée, appuyez sur un autre fichier sur la carte SD en utilisant la commande suivante dans l'invite de commande

    c:\>adb push "c:\image2.png" /sdcard
    

et changer l'entrée dans notre QRDecoder.java pour refléter la même

    Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");

les entrées peuvent être tout format comme QRCode, code-barres, etc .... les types d'images peuvent être bmp, jpg ou png.

J'ai utilisé le site Web ci-dessous pour générer les codes QR à des fins de test

http://barcode.tec-it.com/

http://qrcode.kaywa.com

Merci et je voudrais mentionner le point que je suis un débutant dans le développement d'applications Android et mobile et désolé pour les erreurs que je pourrais avoir fait ...

Si suivent réponse Palani et ne veulent que d'importer ZXing noyau. Voici comment vous pouvez utiliser RGBLuminanceSource sans importer zxing.androidtest .

// import com.google.zxing.client.androidtest.RGBLuminanceSource;
import com.google.zxing.RGBLuminanceSource;

// Bitmap mBitmap; // some bitmap...

int width = mBitmap.getWidth();
int height = mBitmap.getHeight();
int[] pixels = new int[width * height];
mBitmap.getPixels(pixels, 0, width, 0, 0, width, height);

RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);

BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));

try {
   Result result = zxingReader.decode(binaryBitmap);
} catch (Exception e) {
   e.printStackTrace();
}

Maintenant vous pouvez utiliser officiel API de code à barres de Google :

L'API de code à barres détecte les codes à barres en temps réel, sur l'appareil, dans une orientation quelconque. Il peut également détecter plusieurs codes-barres à la fois.

Il lit les formats de codes à barres suivants:

  • codes à barres 1D: EAN-13, EAN-8, UPC-A, UPC-E, Code-39, Code-93, Code 128, ITF, Codabar
  • 2D codes à barres: Code QR, Data Matrix, PDF-417, Aztèque

Il analyse automatiquement des codes QR, Data Matrix, PDF-417, et les valeurs aztèque, pour les formats pris en charge suivants:

  • URL
  • Contact (VCARD, etc.)
  • événement Calendrier
  • E-mail
  • Téléphone
  • SMS
  • ISBN
  • WiFi
  • Géo-localisation (latitude et longitude)
  • AAMVA permis de conduire / ID

Je me suis essayé cette méthode un avant tout semblait fonctionner.

Bien que j'ai quelques points à faire

  1. Il se plaindra de l'com.google.zxing.client.androidtest paquet qui est nécessaire pour la classe RGBLuminanceSource trouvée dans le paquet et utilisé dans le QRDecoder Activity.So importer le package ZXing / androidtest ainsi.

  2. Si vous ajoutez la bibliothèque ZXing en dehors de votre forfait, vous devrez modifier toutes les références R.java comme il l'habitude de trouver le fichier R.java dans son emballage.

Par exemple:

Au lieu de

mRunBenchmarkButton = (Button) findViewById(R.id.benchmark_run);

dans l'utilisation de fichiers BenchmarkActivity.java

mRunBenchmarkButton = (Button) findViewById(yourpackage.R.id.benchmark_run);

On peut aussi utiliser l'interface DDMS d'Eclipse pour pousser le QRCode au dispositif SDCard.

utilisant DDMS

https://github.com/dm77/barcodescanner

Je préférais cette lib sur les services Google Play, car comme d'habitude, Google Services Play exige la même version installée sur l'appareil.

Il intègre ZXing avec le nouveau système de construction et fournit un AAR. Vraiment cool.

J'ai essayé de Embed ZXing (XZing) pendant un certain temps, jusqu'à ce que je découvre Zbar. Ils ont une façon easyer de plongement, moins de code et des exemples faciles.

http://sourceforge.net/projects/zbar/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top