58 votes

Incorporer la bibliothèque Zxing sans utiliser l'application Barcode Scanner

Quel est le moyen privilégié d’incorporer la bibliothèque zxing pour permettre la numérisation sans avoir à installer l’application Barcode Scanner? Je cherche à l'intégrer dans Android sans avoir à demander à l'utilisateur des installations supplémentaires. (Similaire au fonctionnement de l'iPhone src).

59voto

Sean Owen Points 36577

C'est vraiment plus facile de les intégrer via Intention. Plus fiable, et vous obtenez les mises à jour automatiquement. Alors que je ne le conseille pas...

Le code source complet est disponible à partir de la ZXing projet. Vous souhaitez construire core.jar de core/ et la mettre dans votre Android lib/ le dossier d'inclure la base de décodeur dans votre application. Vous ne souhaitez pas inclure javase. Vous pouvez regarder le code en android/ que c'est la source de Scanner de code à Barres, mais en tant qu'auteurs, nous vous suggérons de ne pas simplement copier et coller.

Il est sous licence Apache qui signifie que vous pouvez l'utiliser librement, tant que vous donner à l'utilisateur l'accès à des conditions de licence.

29voto

Palani Babu Points 249

Android/QR code Barres/Multiformat Décodeur.

J'ai fait une application Android à l'aide de la ZXing Api et intégrées par le décodage de code dans mon application. L'entrée de ce décodeur a été donnée par l'intermédiaire de la carte SD de l'émulateur Android.

Voici les étapes:

  1. Tout d'abord, j'ai créé un AVD(émulateur) version 4 dans mon IDE Eclipse avec la SDcard et fonctionnalités de l'Appareil photo sous tension.

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

    c:\>mksdcard 40M mysdcard.iso
    

où 40 M est la taille de la carte SD que j'ai créé..Cela va être enregistré dans le lecteur C:. Note, la .iso partie est importante.

  1. Ensuite, nous avons pour 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 virtual device que j'ai créé à l'étape 1. Le signe '@' avant de l'avd nom est trop important.

Garder l'émulateur fonctionne tout le temps..Si il est fermé, nous avons à refaire le au-dessus de 3 étapes.

  1. Nous pouvons pousser le QR code ou de tout autre code d'images que nous avons de la carte SD, monté 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 l'QRDecoder.java fichier 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, j'ai téléchargé le ZXing Code Source (à l'ZXing-1.6.zip) à partir du lien ci-dessous.

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

Ensuite, l'extrait de cette et accédez à D:\zxing-1.6\core\src\com

copiez le com dossier et de le coller sur votre colis dans Eclipse.

(Note, cliquez du bouton droit sur le package de notre projet et de le coller...si il vous demande de remplacer le dossier existant, sélectionnez yes (oui)

  1. Ensuite, copiez et collez le code ci-dessous dans le res/layout/main.xml fichier

    <?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 ci-dessous dans le res/values/strings.xml fichier

    <?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 ci-dessous dans le res/values/color.xml fichier, s'il n'existe pas, créez-en 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, copiez et collez le code ci-dessous dans 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. Donc, ces étapes ci-dessus fait...notre application est prête. Maintenant, vous pouvez exécuter l'application et il va donner à u la décodé résultat de l'image d'entrée nous ont donné.

  6. Pour modifier l'entrée, pousser un autre fichier de la carte SD à l'aide de la commande suivante dans l'invite de commande

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

et modifier les entrées dans notre QRDecoder.java afin de refléter la même

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

les entrées peuvent être n'importe quel format comme QRCode, code à Barres, etc....les types d'image bmp, jpg ou png.

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

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

ET http://qrcode.kaywa.com

Merci et je tiens à mentionner que je suis juste un débutant dans android et de développement d'applications mobiles et désolé pour les erreurs que j'ai pu faire...

4voto

Rui Marques Points 3152

Si vous suivez Palani, vous souhaitez uniquement importer zxing core. Voici comment 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();
}
 

2voto

Sankalp Points 438

J'ai moi-même essayé cette méthode un plus tout semblait fonctionner.

Si j'ai quelques points à prendre

  1. Il va se plaindre sur le paquet com.google.zxing.client.androidtest qui est nécessaire pour la RGBLuminanceSource classe se trouve dans la trousse et utilisé dans le QRDecoder Activité.Donc importer le zxing/androidtest.

  2. Si vous ajoutez la Bibliothèque Zxing à l'extérieur de votre paquet, vous devrez modifier tous les R.java références comme il l'habitude de trouver la R.java fichier dans son paquet.

Par Exemple:

Au lieu de

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

dans le BenchmarkActivity.java l'utilisation du fichier

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

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

À l'aide de DDMS

-1voto

aslakjo Points 159

J'ai essayé d'intégrer XZing pendant un moment, jusqu'à ce que je découvre Zbar. Ils ont un moyen plus simple d’intégrer, moins de code et des exemples faciles.

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

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