15 Soru: ZXing k├╝t├╝phanesini do─črudan Android uygulamama entegre etmek

taraf─▒ndan olu┼čturulan soru Wed, Aug 10, 2016 12:00 AM

Bunu sadece ├žaresizce yaz─▒yorum :) Android 1.6 telefona ba─č─▒ms─▒z bir barkod taray─▒c─▒ (konsept kan─▒t─▒ olarak) yapmak i├žin g├Ârevlendirildim.

Bunun i├žin ZXing k├╝t├╝phanesini ke┼čfettim.

Googledim, burada StackOverflow ile ilgili ortak konu┼čmalar─▒yla ilgili konular─▒ okudum. Hi├žbir ┼čey yard─▒m etmedi gibi g├Âr├╝n├╝yordu ve ben bu mentale ablukaya bir delik a├žam─▒yorum: /

Bunun m├╝mk├╝n oldu─čunu biliyorum, lib'i kullan─▒p kendi ba─č─▒ms─▒z barkod taray─▒c─▒n─▒z─▒ olu┼čturun. Zxing millet taraf─▒ndan sa─članan "Barkod Taray─▒c─▒" n─▒n kullan─▒lmas─▒n─▒n en kolay ├ž├Âz├╝m oldu─čunu (Intent yoluyla) okudum. Ne yaz─▒k ki bu bir se├ženek de─čil ve ba─č─▒ms─▒z bir uygulama isteniyor.

├ľyleyse sorunumu ├Âzetlemek i├žin:

  1. ZXing source lib, Eclipse arac─▒l─▒─č─▒yla Android Kod projeme nas─▒l entegre edilir?
  2. Entegre edildi─činde ... lib i┼člevinden nas─▒l faydalan─▒l─▒r, tarama i┼člevini "y├╝klemek" i├žin?
  3. EclipseÔÇÖde ├žal─▒┼čmaya ba┼člad─▒─č─▒m i├žin ad─▒m ad─▒m bir k─▒lavuz neredeyse tercih edildi.

Kod projemi, ZXing kaynak klas├Âr├╝ndeki Android klas├Âr├╝ne ba─č─▒ml─▒ hale getirmeye ├žal─▒┼čt─▒m. Bunu yapt─▒─č─▒mda, ├žo─čunlukla 'org.apache' (??)

ile ilgili elle tutulur bir hata ortaya ├ž─▒k─▒yor.

Sadece ├ž├Âzemiyorum ... bu y├╝zden birka├ž ipucu en yararl─▒ olacakt─▒r.

┼×imdiden te┼čekk├╝r ederim :)

    
136
  1. Ne yapmak istedi─činizi burada oldu─čuna inan─▒yorum: stackoverflow.com/questions/4854442/ÔÇŽ
    2011-10-05 14: 55: 09Z
  2. ZXing, barkod okuman─▒n tek yolu de─čil. 2016 itibariyle, Android Barkod API'sini kullanmak ├žok daha kolay >.
    2016-08-10 22: 18: 27Z
15 Yanıtlar                              15                         

G├ťNCELLEME! - SOLVED + GUIDE

Bunu ├ž├Âzmeyi ba┼čard─▒m :) Ve a┼ča─č─▒da, ad─▒m ad─▒m k─▒lavuzumuzu okuyabilirsiniz, b├Âylece umar─▒m sahip oldu─čum problemle ba┼čkalar─▒na yard─▒mc─▒ olabilir;)

  1. Apache Ant'i Kurma - ( config yard─▒m─▒ i├žin bu YouTube videosuna bak─▒n )
  2. ZXing kayna─č─▒n─▒ ZXing ana sayfas─▒ndan indirin ve ├ž─▒kar─▒n
  3. Windows Komut Sat─▒r─▒ (Run- > CMD) kullan─▒larak indirilen zxing src'un k├Âk dizinine gidin.
  4. Komut sat─▒r─▒ penceresinde - ant -f core/build.xml yaz─▒p enter tu┼čuna bas─▒n ve Apache'nin ├žal─▒┼čmas─▒na izin verin [ sorun mu ya┼č─▒yorsunuz? ]
  5. Eclipse Girin - > Yeni ├ž─▒kard─▒─č─▒n─▒z dizindeki android klas├Âr├╝n├╝ temel alan yeni bir Android Projesi
  6. Proje klas├Âr├╝n├╝ sa─č t─▒klay─▒n - > ├ľzellikler - > Java Yap─▒ Yolu - > K├╝t├╝phane - > Harici JAR Ekle ... ...
  7. Yeni ├ž─▒kar─▒lan klas├Âre gidin ve ├žekirdek dizini a├ž─▒n ve core.jar ... hit enter!
  8. '─▒ se├žin

Art─▒k ├ževirilerdeki ve AndroidManifest.xml dosyas─▒ndaki birka├ž hatay─▒ d├╝zeltmek zorundas─▒n─▒z :) Art─▒k mutlu bir ┼čekilde derleyebilirsiniz ve ┼čimdi ZXing kayna─č─▒na dayal─▒ ├žal─▒┼čan bir ba─č─▒ms─▒z barkod taray─▒c─▒ uygulamas─▒na sahip olacaks─▒n─▒z;)

Mutlu kodlayan adamlar - Umar─▒m ba┼čkalar─▒na yard─▒m edebilir :)

    
125
2017-05-23 12: 02: 20Z
  1. Harika yazma! AndroidManifest.xml dosyas─▒nda d├╝zenledikleriniz hakk─▒nda biraz ayr─▒nt─▒ ekleyebilir misiniz? Muayene s─▒ras─▒nda bu dosyada herhangi bir hata g├Ârm├╝yorum. Te┼čekk├╝rler!
    2011-05-26 05: 44: 24Z
  2. AndroidManifest.xml dosyas─▒nda veya ├ževirilerde hata yok. Ancak, en son Android SDK'da uyumluluk sorunlar─▒ var. Kullan─▒rsan─▒z daha sonra kaynak kodunu kullanmak zorundaSVN.
    2011-06-03 21: 12: 03Z
  3. Merhaba, herhangi bir QR Droid veya Barkod Taray─▒c─▒ uygulamas─▒ kullanmadan ba─č─▒ms─▒z bir uygulama olarak QR taramas─▒ i├žin ba┼čka bir uygulama geli┼čtirmeye ├žal─▒┼č─▒yordum. Tam da bunu yapmak i├žin bahsetti─čin ad─▒mlar var m─▒ yoksa hala ba┼čka bir uygulamay─▒ niyet veya ba┼čka bir ┼čeyle mi kullan─▒yorsun?
    2011-07-27 10: 56: 44Z
  4. kodundaki zip paketi .google.com /p /zxing /downloads /list , "├žekirdek" dizininin yan─▒ s─▒ra "android" ve "android entegrasyon" i├žerir. "├çekirdek" kullanman─▒n sebebi nedir?
    2012-04-09 15: 09: 22Z
  5. Tamam, ┼čimdi nedenini biliyorum. Birisi de merak etmi┼čse, l├╝tfen stackoverflow.com/questions/4854442/...
    2012-04-09 16: 04: 34Z

─░┼čte ├╝├ž├╝nc├╝ taraf uygulamas─▒n─▒ kurmak zorunda kalmadan ZXing k├╝t├╝phanesini kullanarak QR kodunun nas─▒l olu┼čturulaca─č─▒ ve g├Âsterilece─či ile ilgili ad─▒m ad─▒m k─▒lavuz. Not: ZXing'i ANT veya ba┼čka bir olu┼čturma arac─▒yla olu┼čturman─▒z gerekmez. core.jar dosyas─▒, yay─▒mlanan zip ar┼čivinde bulunur (a┼ča─č─▒da okuyun).

  1. ZXingÔÇÖin en son s├╝r├╝m├╝n├╝ indirin. - (ZXing-*.zip)
  2. Bu zip ar┼čivini ├ž─▒kar─▒n ve core.jar dizininin alt─▒nda core/'u bulun.
  3. Eclipse IDE kullan─▒yorsan─▒z, core.jar'u Android projenizin libs dizinine s├╝r├╝kleyip b─▒rak─▒n. Soruldu─čunda, Kopyala 'y─▒ se├žin.
  4. A┼ča─č─▒da verilen iki s─▒n─▒f─▒ (Contents.java ve QRCodeEncoder.java) Android projenizin ana paketine kopyalay─▒n.
  5. Zaten bir tane yoksa, olu┼čturulan QR kodunu g├Âr├╝nt├╝lemek i├žin Etkinli─činizde bir ImageView ├Â─če olu┼čturun. A┼ča─č─▒da bir ├Ârnek verilmi┼čtir:
  6. QR kodunu Bitmap format─▒nda olu┼čturmak ve onu ImageView'da g├Âr├╝nt├╝lemek i├žin a┼ča─č─▒daki kod par├žas─▒n─▒ kullan─▒n.

─░┼čte Etkinlik d├╝zeni XML dosyan─▒za eklenecek bir ImageView ├Â─česi:

 
<ImageView 
    android:id="@+id/qrCode"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:layout_centerHorizontal="true"/>

Kod pasaj─▒:

 
// ImageView to display the QR code in.  This should be defined in 
// your Activity's XML layout file
ImageView imageView = (ImageView) findViewById(R.id.qrCode);

String qrData = "Data I want to encode in QR code";
int qrCodeDimention = 500;

QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, null,
        Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), qrCodeDimention);

try {
    Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
    imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
    e.printStackTrace();
}

─░┼čte Contents.java

 
//
// * Copyright (C) 2008 ZXing authors
// * 
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// * 
// * http://www.apache.org/licenses/LICENSE-2.0
// * 
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// 

import android.provider.ContactsContract;

public final class Contents {
    private Contents() {
    }

    public static final class Type {

     // Plain text. Use Intent.putExtra(DATA, string). This can be used for URLs too, but string
     // must include "http://" or "https://".
        public static final String TEXT = "TEXT_TYPE";

        // An email type. Use Intent.putExtra(DATA, string) where string is the email address.
        public static final String EMAIL = "EMAIL_TYPE";

        // Use Intent.putExtra(DATA, string) where string is the phone number to call.
        public static final String PHONE = "PHONE_TYPE";

        // An SMS type. Use Intent.putExtra(DATA, string) where string is the number to SMS.
        public static final String SMS = "SMS_TYPE";

        public static final String CONTACT = "CONTACT_TYPE";

        public static final String LOCATION = "LOCATION_TYPE";

        private Type() {
        }
    }

    public static final String URL_KEY = "URL_KEY";

    public static final String NOTE_KEY = "NOTE_KEY";

    // When using Type.CONTACT, these arrays provide the keys for adding or retrieving multiple phone numbers and addresses.
    public static final String[] PHONE_KEYS = {
            ContactsContract.Intents.Insert.PHONE, ContactsContract.Intents.Insert.SECONDARY_PHONE,
            ContactsContract.Intents.Insert.TERTIARY_PHONE
    };

    public static final String[] PHONE_TYPE_KEYS = {
            ContactsContract.Intents.Insert.PHONE_TYPE,
            ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE,
            ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE
    };

    public static final String[] EMAIL_KEYS = {
            ContactsContract.Intents.Insert.EMAIL, ContactsContract.Intents.Insert.SECONDARY_EMAIL,
            ContactsContract.Intents.Insert.TERTIARY_EMAIL
    };

    public static final String[] EMAIL_TYPE_KEYS = {
            ContactsContract.Intents.Insert.EMAIL_TYPE,
            ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE,
            ContactsContract.Intents.Insert.TERTIARY_EMAIL_TYPE
    };
}

Ve QRCodeEncoder.java

 
/*
 * Copyright (C) 2008 ZXing authors
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import android.provider.ContactsContract;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.telephony.PhoneNumberUtils;

import java.util.Collection;
import java.util.EnumMap;
import java.util.HashSet;
import java.util.Map;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

public final class QRCodeEncoder {
    private static final int WHITE = 0xFFFFFFFF;
    private static final int BLACK = 0xFF000000;

    private int dimension = Integer.MIN_VALUE;
    private String contents = null;
    private String displayContents = null;
    private String title = null;
    private BarcodeFormat format = null;
    private boolean encoded = false;

    public QRCodeEncoder(String data, Bundle bundle, String type, String format, int dimension) {
        this.dimension = dimension;
        encoded = encodeContents(data, bundle, type, format);
    }

    public String getContents() {
        return contents;
    }

    public String getDisplayContents() {
        return displayContents;
    }

    public String getTitle() {
        return title;
    }

    private boolean encodeContents(String data, Bundle bundle, String type, String formatString) {
        // Default to QR_CODE if no format given.
        format = null;
        if (formatString != null) {
            try {
                format = BarcodeFormat.valueOf(formatString);
            } catch (IllegalArgumentException iae) {
                // Ignore it then
            }
        }
        if (format == null || format == BarcodeFormat.QR_CODE) {
            this.format = BarcodeFormat.QR_CODE;
            encodeQRCodeContents(data, bundle, type);
        } else if (data != null && data.length() > 0) {
            contents = data;
            displayContents = data;
            title = "Text";
        }
        return contents != null && contents.length() > 0;
    }

    private void encodeQRCodeContents(String data, Bundle bundle, String type) {
        if (type.equals(Contents.Type.TEXT)) {
            if (data != null && data.length() > 0) {
                contents = data;
                displayContents = data;
                title = "Text";
            }
        } else if (type.equals(Contents.Type.EMAIL)) {
            data = trim(data);
            if (data != null) {
                contents = "mailto:" + data;
                displayContents = data;
                title = "E-Mail";
            }
        } else if (type.equals(Contents.Type.PHONE)) {
            data = trim(data);
            if (data != null) {
                contents = "tel:" + data;
                displayContents = PhoneNumberUtils.formatNumber(data);
                title = "Phone";
            }
        } else if (type.equals(Contents.Type.SMS)) {
            data = trim(data);
            if (data != null) {
                contents = "sms:" + data;
                displayContents = PhoneNumberUtils.formatNumber(data);
                title = "SMS";
            }
        } else if (type.equals(Contents.Type.CONTACT)) {
            if (bundle != null) {
                StringBuilder newContents = new StringBuilder(100);
                StringBuilder newDisplayContents = new StringBuilder(100);

                newContents.append("MECARD:");

                String name = trim(bundle.getString(ContactsContract.Intents.Insert.NAME));
                if (name != null) {
                    newContents.append("N:").append(escapeMECARD(name)).append(';');
                    newDisplayContents.append(name);
                }

                String address = trim(bundle.getString(ContactsContract.Intents.Insert.POSTAL));
                if (address != null) {
                    newContents.append("ADR:").append(escapeMECARD(address)).append(';');
                    newDisplayContents.append('\n').append(address);
                }

                Collection<String> uniquePhones = new HashSet<String>(Contents.PHONE_KEYS.length);
                for (int x = 0; x < Contents.PHONE_KEYS.length; x++) {
                    String phone = trim(bundle.getString(Contents.PHONE_KEYS[x]));
                    if (phone != null) {
                        uniquePhones.add(phone);
                    }
                }
                for (String phone : uniquePhones) {
                    newContents.append("TEL:").append(escapeMECARD(phone)).append(';');
                    newDisplayContents.append('\n').append(PhoneNumberUtils.formatNumber(phone));
                }

                Collection<String> uniqueEmails = new HashSet<String>(Contents.EMAIL_KEYS.length);
                for (int x = 0; x < Contents.EMAIL_KEYS.length; x++) {
                    String email = trim(bundle.getString(Contents.EMAIL_KEYS[x]));
                    if (email != null) {
                        uniqueEmails.add(email);
                    }
                }
                for (String email : uniqueEmails) {
                    newContents.append("EMAIL:").append(escapeMECARD(email)).append(';');
                    newDisplayContents.append('\n').append(email);
                }

                String url = trim(bundle.getString(Contents.URL_KEY));
                if (url != null) {
                    // escapeMECARD(url) -> wrong escape e.g. http\://zxing.google.com
                    newContents.append("URL:").append(url).append(';');
                    newDisplayContents.append('\n').append(url);
                }

                String note = trim(bundle.getString(Contents.NOTE_KEY));
                if (note != null) {
                    newContents.append("NOTE:").append(escapeMECARD(note)).append(';');
                    newDisplayContents.append('\n').append(note);
                }

                // Make sure we've encoded at least one field.
                if (newDisplayContents.length() > 0) {
                    newContents.append(';');
                    contents = newContents.toString();
                    displayContents = newDisplayContents.toString();
                    title = "Contact";
                } else {
                    contents = null;
                    displayContents = null;
                }

            }
        } else if (type.equals(Contents.Type.LOCATION)) {
            if (bundle != null) {
                // These must use Bundle.getFloat(), not getDouble(), it's part of the API.
                float latitude = bundle.getFloat("LAT", Float.MAX_VALUE);
                float longitude = bundle.getFloat("LONG", Float.MAX_VALUE);
                if (latitude != Float.MAX_VALUE && longitude != Float.MAX_VALUE) {
                    contents = "geo:" + latitude + ',' + longitude;
                    displayContents = latitude + "," + longitude;
                    title = "Location";
                }
            }
        }
    }

    public Bitmap encodeAsBitmap() throws WriterException {
        if (!encoded) return null;

        Map<EncodeHintType, Object> hints = null;
        String encoding = guessAppropriateEncoding(contents);
        if (encoding != null) {
            hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
            hints.put(EncodeHintType.CHARACTER_SET, encoding);
        }
        MultiFormatWriter writer = new MultiFormatWriter();
        BitMatrix result = writer.encode(contents, format, dimension, dimension, hints);
        int width = result.getWidth();
        int height = result.getHeight();
        int[] pixels = new int[width * height];
        // All are 0, or black, by default
        for (int y = 0; y < height; y++) {
            int offset = y * width;
            for (int x = 0; x < width; x++) {
                pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
            }
        }

        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
        return bitmap;
    }

    private static String guessAppropriateEncoding(CharSequence contents) {
        // Very crude at the moment
        for (int i = 0; i < contents.length(); i++) {
            if (contents.charAt(i) > 0xFF) { return "UTF-8"; }
        }
        return null;
    }

    private static String trim(String s) {
        if (s == null) { return null; }
        String result = s.trim();
        return result.length() == 0 ? null : result;
    }

    private static String escapeMECARD(String input) {
        if (input == null || (input.indexOf(':') < 0 && input.indexOf(';') < 0)) { return input; }
        int length = input.length();
        StringBuilder result = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            char c = input.charAt(i);
            if (c == ':' || c == ';') {
                result.append('\\');
            }
            result.append(c);
        }
        return result.toString();
    }
}
    
82
2013-03-19 21: 23: 12Z
  1. Son ZXing'in bir nedenden ├Ât├╝r├╝ core.jar dosyas─▒ yok. Bunun i├žin 2.1 indirmek zorunda kald─▒m.
    2013-06-26 00: 04: 40Z
  2. core.jar Maven s├╝r├╝m deposunda ayr─▒ olarak bulunur, 2.2 s├╝r├╝m├╝ i├žin ba─člant─▒ repo1.maven.org/maven2/com/google/zxing/core/2.2/core-2.2.jar
    2013-10-16 15: 01: 00Z
  3. 2014-02-01 22: 06: 26Z
  4. Kodlanmam─▒┼čAsBitmap () y├Ânteminiz, de─či┼čtirilmemi┼čse null d├Ând├╝r├╝r veya null d├Ând├╝ren sat─▒r─▒ yorumlarsam NullPointerException ile ba┼čar─▒s─▒z olur. Bu k├╝t├╝phanede yeniyim. Neyi yanl─▒┼č yap─▒yorum?
    2014-02-12 08: 31: 13Z
  5. @ Wesam, Ger├žekten yard─▒mc─▒ oldu. Fakat tersini yapabilece─činiz kodu da sa─člayabilirsiniz. Yani, QR kodunu tekrar String'e d├Ân├╝┼čt├╝rmek ister misiniz?
    2014-05-15 15: 31: 45Z

 
compile 'com.google.zxing:core:2.3.0'

maalesef benim i├žin i┼če yaramad─▒.

Bu ne wobenim i├žin rked:

 
dependencies {
   compile 'com.journeyapps:zxing-android-embedded:3.0.1@aar'
   compile 'com.google.zxing:core:3.2.0'
}

L├╝tfen ba─člant─▒y─▒ burada bulun: https://github.com/journeyapps/zxing-android-embedded > ┬á┬á┬á┬á

15
2017-07-25 09: 50: 02Z
  1. Bu cevap, buradaki di─čer cevaplar taraf─▒ndan dwarfed. ├ço─ču ekran g├Âr├╝nt├╝s├╝ ve benzeri. Bu ger├žekten ay─▒p, ├žal─▒┼čan tek cevap bu! Buna dikkat et. Bahsetmedi─či, ba─člant─▒l─▒ proje, birisinin bu zor k├╝t├╝phaneyi, kullan─▒m─▒ kolay (ve asl─▒nda kolay) bir k├╝t├╝phane haline getirdi─či bir dald─▒r. ├çekirdek kavanozunu normal ZXING projesinden indirin ve gitmeye haz─▒rs─▒n─▒z. Hatta ├Ârnekler var !!!!
    2016-01-06 09: 46: 26Z
  2. Ke┼čke daha fazla oy verebilseydim. Bunu y─▒llar boyunca farkl─▒ projelerde bulmaya ka├ž farkl─▒ zaman ay─▒rd─▒─č─▒m─▒ bilmiyorsunuz.
    2016-01-06 09: 49: 18Z
  3. Çocuklara hizmet vermekten mutluluk duyuyorum :)
    2016-01-06 11: 00: 14Z

ANT ile bina yapmakta sorun mu ya┼č─▒yorsunuz? Okumaya devam et

ant -f core/build.xml ise ┼č├Âyle bir ┼čey s├Âyl├╝yor:

 
Unable to locate tools.jar. Expected to find it in
C:\Program Files\Java\jre6\lib\tools.jar

JAVA_HOME ortam de─či┼čkeninizi uygun java klas├Âr├╝ne ayarlay─▒n. Tools.jar i├žinde (Windows i├žin) buldum:

 
C:\Program Files\Java\jdk1.6.0_21\lib

JAVA_HOMEÔÇÖumu ┼čuraya ayarlad─▒m:

 
C:\Progra~1\Java\jdk1.6.0_25

Baz─▒ sitelerde buldu─čum k─▒sa s├Âzdiziminin sebebi ┼č├Âyle yaz─▒yor:

  

"Size ┼čiddetle tavsiye edilir ┬á┬ábir y├╝kleme dizini se├žin ┬á┬áyolda bo┼čluk i├žermez ┬á┬áisim (├Âr. ┬á┬áC: \Program Dosyalar─▒). Java ise ┬á┬áb├Âyle bir dizine y├╝kl├╝ ┬á┬áJAVA_HOME ayarlamak kritik ┬á┬áortam de─či┼čkeni bir yola ┬á┬ábo┼čluk i├žermez (├Âr. ┬á┬áC: \Progra ~ 1); bunu yapmamak ┬á┬áBaz─▒lar─▒ taraf─▒ndan at─▒lan istisnalar ┬á┬áde─čerine ba─čl─▒ programlar ┬á┬áJava_home. "

Daha sonra cmd'yi yeniden ba┼člatt─▒m (DOS kabu─ču yaln─▒zca ba┼člat─▒rken env de─či┼čkenlerini okudu─ču i├žin ├Ânemlidir, bu nedenle env de─či┼čkenini de─či┼čtirmek, g├╝ncellenmi┼č de─čeri elde etmek i├žin yeni bir kabuk kullanman─▒z─▒ gerektirir)

ve nihayet ant -f core/build.xml ├žal─▒┼čt─▒.

    
11
2011-06-13 18: 30: 11Z
  1. tools.jarÔÇÖdan C:\Program Files\Java\jre6\libÔÇÖa kopyalama da benim i├žin ├žal─▒┼čt─▒ ..
    2011-11-11 12: 21: 04Z

Yan─▒tlar─▒n baz─▒lar─▒ modas─▒ ge├žmi┼č oldu─ču i├žin, kendime ait olan─▒ vermek istiyorum -

ZXing k├╝t├╝phanesini WikiÔÇÖleri taraf─▒ndan ├Ânerildi─či ┼čekilde Android uygulaman─▒za entegre etmek i├žin >, projenize 2 Java dosyas─▒ eklemeniz gerekiyor:

Ard─▒ndan Android Studio 'da build.gradle dosyas─▒na ┼ču sat─▒r─▒ ekleyin:

 
dependencies {
    ....
    compile 'com.google.zxing:core:3.2.1'
}

Veya hala ADT eklentili Eclipse kullan─▒yorsan─▒z, core.jar projenizin libs alt dizinine dosya (burada tam ekran Windows ve tam ekran Mac ):

Windows ekran g├Âr├╝nt├╝s├╝

Sonunda bu kodu MainActivity.java :

 
public void scanQRCode(View v) {
    IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);
    integrator.initiateScan(IntentIntegrator.QR_CODE_TYPES);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult result = 
        IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
    if (result != null) {
        String contents = result.getContents();
        if (contents != null) {
            showDialog(R.string.result_succeeded, result.toString());
        } else {
            showDialog(R.string.result_failed,
                getString(R.string.result_failed_why));
        }
    }
}

private void showDialog(int title, CharSequence message) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(title);
    builder.setMessage(message);
    builder.setPositiveButton(R.string.ok_button, null);
    builder.show();
}

Sonu├žta ortaya ├ž─▒kan uygulama ZXing'e g├Âre Barkod Taray─▒c─▒ uygulamas─▒ (uygulaman─▒za geri d├Ânecektir) tarad─▒ktan sonra otomatik olarak):

Barkod Taray─▒c─▒ uygulamas─▒

Ek olarak, ZXing Test uygulamas─▒n─▒ olu┼čturmak ve ├žal─▒┼čt─▒rmak istiyorsan─▒z kendi uygulaman─▒z i├žin ilham kayna─č─▒ olarak:

ZXing Test uygulamas─▒

O zaman GitHub :

  • BenchmarkActivity.java
  • BenchmarkAsyncTask.java
  • BenchmarkItem.java
  • ZXingTestActivity.java

Ve Maven deposu 'ndan 3 Jar dosyas─▒ ve 3 Jar dosyas─▒:

  • core.jar
  • android-core.jar
  • android-integration.jar

(Jar dosyalar─▒n─▒ mvn package ile kendiniz olu┼čturabilirsiniz - GitHub'dan ZXing'i kontrol edip bilgisayar─▒n─▒za ant ve maven ara├žlar─▒n─▒ y├╝kl├╝yorsan─▒z).

Not: projeniz Jar dosyalar─▒n─▒ tan─▒m─▒yorsa, Proje ├ľzelliklerinde Java s├╝r├╝m├╝n├╝ y├╝kseltmeniz gerekebilir:

properties ekran g├Âr├╝nt├╝s├╝

    
11
2015-09-21 20: 10: 26Z
  1. Harika bir cevap!
    2015-06-01 11: 59: 35Z
  2. Korkar─▒m ki bu soruyu cevaplamad─▒ :-( Mesele harici bir uygulamaya dayanmamakt─▒. Bu, harici bir uygulamay─▒ nas─▒l kullanaca─č─▒n─▒ g├Âsteriyor. "Do─črudan" adl─▒ soru ba┼čl─▒─č─▒na bak─▒n
    2016-01-06 08: 07: 56Z

zxing web sitesinde wiki sayfalar─▒n─▒ g├Ârd├╝n├╝z m├╝? G├Âr├╝n├╝┼če g├Âre Ba┼člarken , DeveloperNotes ve ScanningViaIntent yard─▒msever.

    
4
2011-01-24 17: 29: 45Z
  1. ├ťzg├╝n├╝m ... arad─▒─č─▒m yard─▒m tam de─čildi :) Ama bug├╝n bir at─▒l─▒m yapt─▒m: PI kendimi ├ž├Âzmeyi ba┼čard─▒;) ayn─▒ sorunla kar┼č─▒la┼čan di─čer izleyiciler de ate┼čli bir ┼čekilde yay─▒nlanacak :)
    2011-01-26 13: 37: 08Z

koy

 
compile 'com.google.zxing:core:2.3.0' 

Gradle ba─č─▒ml─▒l─▒klar─▒n─▒za. Bu kadar kolay. Android Studio ve Gradle build sistemini kullanmadan ├Ânce.

    
4
2015-06-02 16: 51: 24Z
  1. Do─čru! 2015'teki ger├žek ├ž├Âz├╝m bu. Btw. Ge├žerli s├╝r├╝m 3.2.0'd─▒r
    2015-07-06 14: 54: 26Z
  2. bu herkes i├žin i┼če yarad─▒ m─▒? IntentIntegrator hala bulunamad─▒.
    2015-07-07 09: 28: 49Z
  3. IntentIntegrator.java ve IntentResult.java Android Studio projenize manuel olarak.
    2015-08-19 08: 22: 30Z

Zxing'den core.jar'a ihtiyac─▒n─▒z varsa, bu i┼člemi atlay─▒p ├Ânceden olu┼čturulmu┼č JAR'lar─▒ Ba┼člarken wiki sayfas─▒

En Son ZXing (2.2), ├žekirdek klas├Âr├╝ alt─▒nda core.jar'a sahip de─čildir, ancak core.jar dosyas─▒n─▒ buradaki Maven deposu

    
2
2013-09-26 11: 16: 13Z

Eclipse'de zxing 3.2.1 kurulumu i├žin ad─▒m ad─▒m

  1. zxing-master.zip dosyas─▒n─▒ " https://github.com/zxing/zxing adresinden indirin "
  2. zxing-master.zip dosyas─▒n─▒ ├ž─▒kar─▒n, zxing-master i├žindeki "android" projesini i├že aktarmak i├žin eclipse kullan─▒n
  3. " adresinden core-3.2.1.jar dosyas─▒n─▒ indirin http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/ "
  4. "android" projesinde "libs" klas├Âr├╝ olu┼čturun ve cor-3.2.1.jar dosyas─▒n─▒ libs klas├Âr├╝ne yap─▒┼čt─▒r─▒n
  5. Projeye t─▒klay─▒n: "├Âzellikleri" se├žin - > "Java Compiler" seviyesini 1.7 olarak de─či┼čtirdi. Ard─▒ndan "Android", "Proje olu┼čturma hedefi" ni t─▒klay─▒n, Android 4.4.2+ s├╝r├╝m├╝ne ge├žin, ├ž├╝nk├╝ 1.7 kullanmak Android 4.4 ile derlenmeyi gerektirir
  6. "CameraConfigurationUtils.java", "zxing-master /android /uygulama /src /ana /java /com /google /zxing /m├╝┼čteri /android /kamera /" i├žinde mevcut de─čilse. "Zxing-master /android-core /src /main /java /com /google /zxing /m├╝┼čteri /android /kamera /" dan kopyalay─▒p projenize yap─▒┼čt─▒rabilirsiniz.
  7. Projeyi temizleyin ve olu┼čturun. Projeniz "switch - case" ile ilgili hata g├Âsteriyorsa, bunlar─▒ "if - else" olarak de─či┼čtirmelisiniz.
  8. Tamamlanan. Projeyi temizleyin ve olu┼čturun.
  9. Referans ba─člant─▒s─▒: Olu┼čturmak i├žin ZXing'i kullanma android barkod tarama uygulamas─▒
2
2017-05-23 12: 18: 04Z

Bunu ba┼čarmak i├žin m├╝mk├╝n olan b├╝t├╝n yollar─▒ denedim ve daha sonra JourneyApps taraf─▒ndan k├╝├ž├╝lt├╝lm├╝┼č xZing s├╝r├╝m├╝n├╝ ke┼čfettim. Bunu tutulmas─▒ i├žin ta┼č─▒d─▒m ve GitHub'da payla┼čt─▒m.

Tutulmas─▒ kullan─▒yorsan─▒z bu projeyi kullan─▒n: -

https://github.com/hiteshsahu/XZing-Barcode-Scanner -Minified-Eclipse

Studio kullan─▒yorsan─▒z bu projeyi kullan─▒n: -

https://github.com/journeyapps/zxing-android-embedded

Avantajlar

  1. Uygulaman─▒zdaki Dahili Barkod taray─▒c─▒, Google Play Store kullanarak ├╝├ž├╝nc├╝ taraf uygulamalar─▒ y├╝klemek zorunda de─čildir.

  2. Core, Android istemcisi vb. kavanozlar aras─▒nda kafan─▒z─▒n kar─▒┼čmas─▒na gerek yok, kavanozlar bu paketleri ve ilgili d├╝zenleri projenize b─▒rak─▒n ve gitmeniz iyi olur. Sadece gerekli olan kavanoz, com.google.zxing: core: 3.2.0 'dan indirebilirsiniz.

    http://mvnrepository.com/artifact/com.google .zxing /├žekirdek /3.2.0

  3. Tonlarca paket eklemenize gerek yok , kar┼č─▒la┼čt─▒rma i├žin a┼ča─č─▒daki resimlere bak─▒n

├ľnce: -

 buraya resim a├ž─▒klamas─▒n─▒ girin

Sonra: -

 buraya resim a├ž─▒klamas─▒n─▒ girin

  1. En ├Ânemli k─▒s─▒m, ├Âzelle┼čtirilebilir olmalar─▒d─▒r, yani. fla┼č ─▒┼č─▒─č─▒ ekleyebilir, par├žal─▒ olarak kullanabilir ve oryantasyon de─či┼čikli─čini destekleyebilirsiniz.

  2. Bu Yakalama etkinli─čini barkod taramas─▒ i├žin Cordova Uygulamas─▒ 'nda kullanabilirsiniz.

cUygulama listesindeki apture etkinli─či ┼č├Âyle g├Âr├╝n├╝r:

 
  <activity
            android:name="com.journeyapps.barcodescanner.CaptureActivity"
            android:clearTaskOnLaunch="true"
            android:configChanges="orientation|keyboardHidden"
            android:exported="false"
            android:screenOrientation="fullSensor"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden" >
            <intent-filter>
                <action android:name="com.google.zxing.client.android.SCAN" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

ve eklenti ┼čunun gibi g├Âr├╝necek

 
public class BarcodeScanner extends CordovaPlugin {
    public static final int REQUEST_CODE = 0x0ba7c0de;

    private static final String SCAN = "scan";
    private static final String CANCELLED = "cancelled";
    private static final String FORMAT = "format";
    private static final String TEXT = "text";
    private static final String SCAN_INTENT = "com.google.zxing.client.android.SCAN";

    private static final String LOG_TAG = "BarcodeScanner";

    private CallbackContext callbackContext;

    /**
     * Constructor.
     */
    public BarcodeScanner() {


    }

    /**
     * Executes the request.
     *
     * This method is called from the WebView thread. To do a non-trivial amount of work, use:
     *     cordova.getThreadPool().execute(runnable);
     *
     * To run on the UI thread, use:
     *     cordova.getActivity().runOnUiThread(runnable);
     *
     * @param action          The action to execute.
     * @param args            The exec() arguments.
     * @param callbackContext The callback context used when calling back into JavaScript.
     * @return                Whether the action was valid.
     *
     * @sa https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/CordovaPlugin.java
     */
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
        this.callbackContext = callbackContext;
        if (action.equals(SCAN)) {
            scan(args);
        } else {
            return false;
        }
        return true;
    }

    /**
     * Starts an intent to scan and decode a barcode.
     */
    public void scan(JSONArray args) {
        Intent intentScan = new Intent(SCAN_INTENT);
        intentScan.addCategory(Intent.CATEGORY_DEFAULT);

        // add config as intent extras
        if(args.length() > 0) {

            JSONObject obj;
            JSONArray names;
            String key;
            Object value;

            for(int i=0; i<args.length(); i++) {

                try {
                    obj = args.getJSONObject(i);
                } catch(JSONException e) {
                    Log.i("CordovaLog", e.getLocalizedMessage());
                    continue;
                }

                names = obj.names();
                for(int j=0; j<names.length(); j++) {
                    try {
                        key = names.getString(j);
                        value = obj.get(key);

                        if(value instanceof Integer) {
                            intentScan.putExtra(key, (Integer)value);
                        } else if(value instanceof String) {
                            intentScan.putExtra(key, (String)value);
                        }

                    } catch(JSONException e) {
                        Log.i("CordovaLog", e.getLocalizedMessage());
                        continue;
                    }
                }
            }

        }

        // avoid calling other phonegap apps
        intentScan.setPackage(this.cordova.getActivity().getApplicationContext().getPackageName());

        this.cordova.startActivityForResult((CordovaPlugin) this, intentScan, REQUEST_CODE);
    }

    /**
     * Called when the barcode scanner intent completes.
     *
     * @param requestCode The request code originally supplied to startActivityForResult(),
     *                       allowing you to identify who this result came from.
     * @param resultCode  The integer result code returned by the child activity through its setResult().
     * @param intent      An Intent, which can return result data to the caller (various data can be attached to Intent "extras").
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == REQUEST_CODE) {
            if (resultCode == Activity.RESULT_OK) {
                JSONObject obj = new JSONObject();
                try {
                    obj.put(TEXT, intent.getStringExtra("SCAN_RESULT"));
                    obj.put(FORMAT, intent.getStringExtra("SCAN_RESULT_FORMAT"));
                    obj.put(CANCELLED, false);
                } catch (JSONException e) {
                    Log.d(LOG_TAG, "JSONException "+e.getMessage());
                }
                this.callbackContext.success(obj);
            } else if (resultCode == Activity.RESULT_CANCELED) {
                this.callbackContext.success("");
            } else {
                this.callbackContext.error("Technical Problem");
            }
        }
    }
}

Mutlu Entegrasyon !!

    
2
2016-01-22 09: 53: 10Z

Zxing ├žal─▒┼čanlar─▒, 1.7 ile bir android projesi olu┼čturmay─▒ kolayla┼čt─▒rd─▒. Eskisi kadar ac─▒ verici de─čil. Bu h─▒zl─▒ bir ┼čekilde android i├žin zxing projesi olu┼čturmak isteyen herkes i├žin h─▒zl─▒ bir blog.

  • zxing.org adresindeki zxing kaynaklar─▒n─▒ inceleyin
  • Tutulman─▒z ├╝zerinde bir Android projesi olu┼čturun
  • main.xml dosyas─▒n─▒ sil
  • ÔÇťsrcÔÇŁ dizinine sa─č t─▒klay─▒n ve i├že aktar d├╝─čmesine t─▒klay─▒n. Belirtilen s─▒raya g├Âre a┼ča─č─▒daki dizinlere g├Âz at─▒n. Bunlar─▒ birer birer i├že aktar─▒lmak ├╝zere ekledik├že, i├že aktarma sihirbaz─▒n─▒n d├╝zenleme alan─▒nda src dizininin oldu─čundan emin olun. Ve sol dizin a─čac─▒nda sadece ÔÇťcomÔÇŁ dizinini se├žtiniz. Src se├žmeyin.
  • ├žekirdek
  • android-b├╝t├╝nle┼čme
  • android
  • Android sdk s├╝r├╝m├╝n├╝z├╝n 9 oldu─čundan, daha k├╝├ž├╝k ve androidmanifest.xml ├Â─čelerinin a─člayaca─č─▒ndan emin olun.
  • Dillerden birinde Strings.xml, be┼čik olacakt─▒r, sadece ÔÇśkarakterinin ├Ân├╝ne /koyunuz

Zxing 1.7 (20 HaziranÔÇÖda ├Âdeme) i├žin bir android projesi.

http://www.4shared.com/file/bFx8Y5Ys/zXingJune2010 .html ( HERHANG─░ B─░R MEVCUT DE─×─░L )

    
2
2016-01-28 19: 05: 02Z

Google hizmetlerini oynat─▒rken neden harici bir lib kullan─▒yorsunuz? ( 7.8.0 s├╝r├╝m├╝nden beri) ) bir barkod kod ├ž├Âz├╝c├╝ i├žerir.

    
2
2016-06-21 22: 09: 25Z
  1. Google'da engellendi─či i├žin Google'da Google Play hizmetlerini y├╝kleyemezsiniz.
    2016-08-07 00: 06: 23Z
  2. Google oyun hizmetlerini neyse ki y├╝klediyseniz, Google engellendi─či i├žin ├çin'de hala kullanamazs─▒n─▒z.
    2016-08-07 00: 07: 20Z

Az ├Ânce Bitmap - String aras─▒nda olu┼čturulan barkodlar─▒ ├ž├Âzen bir y├Ântem yazd─▒m.

CaptureActivity olmadan, tam olarak talep edilen ┼čeyi yapar ...

Bu nedenle, bir ki┼či android-integration'daki build.gradle kitapl─▒─č─▒n─▒ atlayabilir:

 
dependencies {
    // https://mvnrepository.com/artifact/com.google.zxing
    compile('com.google.zxing:core:3.3.0')
    compile('com.google.zxing:android-core:3.3.0')
}

A┼ča─č─▒daki y├Ântem (asl─▒nda bir jUnit testinde olu┼čturulan barkodlar─▒n kodunu ├ž├Âzen):

 
import android.graphics.Bitmap;

import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.Result;

protected String decode(Bitmap bitmap) {

    MultiFormatReader reader = new MultiFormatReader();
    String barcode = null;

    int[] intArray = new int[bitmap.getWidth() * bitmap.getHeight()];
    bitmap.getPixels(intArray, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
    LuminanceSource source = new RGBLuminanceSource(bitmap.getWidth(), bitmap.getHeight(), intArray);
    BinaryBitmap binary = new BinaryBitmap(new HybridBinarizer(source));

    try {

        Result result = reader.decode(binary);
        // BarcodeFormat format = result.getBarcodeFormat(); 
        // ResultPoint[] points = result.getResultPoints();
        // byte[] bytes = result.getRawBytes(); 
        barcode = result.getText();

    } catch (NotFoundException e) {
        e.printStackTrace();
    }
    return barcode;
}
    
1
2017-09-19 14: 16: 32Z

Son zamanlarda hem ios hem de android'de google mobile vision kulland─▒m. Google Barkod Taramas─▒ kullanman─▒z─▒ ┼čiddetle tavsiye ederim. Herhangi bir y├Ânlendirme ile olduk├ža duyarl─▒ ve i┼člem s├╝resi olduk├ža h─▒zl─▒. Buna Google Mobil Vizyon denir.

  

Barkod Taray─▒c─▒ API, herhangi bir zamanda ger├žek zamanl─▒ olarak barkodlar─▒ alg─▒lar ┬á┬áoryantasyon. Ayr─▒ca birka├ž barkodu tespit edip ayr─▒┼čt─▒rabilirsiniz. ┬á┬áayn─▒ anda farkl─▒ bi├žimler.

https://developers.google.com/vision/

https://codelabs.developers.google.com/codelabs/barkodlar /# 0

    
0
2017-05-24 15: 56: 40Z

├çok Daha Kolay Bir Yakla┼č─▒m.

Yaln─▒zca uygulama d├╝zeyindeki gradle dosyan─▒za ba─č─▒ml─▒l─▒k ekleyin

compile 'com.journeyapps:zxing-android-embedded:3.0.1@aar'
compile 'com.google.zxing:core:3.2.0'  

xml dosyan─▒zda bir d├╝─čme tan─▒mlay─▒n ve OnCreate () i├žindeki ve OnClick d├╝─čmesinin OnClick dinleyicisinin i├žindeki Java dosyas─▒na a┼ča─č─▒daki kodu yaz─▒n.

 
new IntentIntegrator(this).initiateScan();

Ve Java dosyas─▒n─▒n OnCreate () ÔÇÖsinden sonra a┼ča─č─▒daki kodu yaz─▒n

 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            Log.d("MainActivity", "Cancelled scan");
            Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
        } else {
            Log.d("MainActivity", "Scanned");
            String st_scanned_result = result.getContents();
            Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();

        }
    }

}
    
0
2019-05-06 06: 44: 35Z
  1. st_scanned_result burada tan─▒mlanmad─▒
    2019-05-04 18: 23: 31Z
  2. Bu, String t├╝r├╝nde genel bir de─či┼čkendir. Taranan sonucu bu onActivtyResult () taraf─▒ndan kullanm─▒yorsan─▒z, yerel olarak tan─▒mlayabilirsiniz. Like String st_scanned_result = result.getContents (); Ben plz chk g├╝ncelledik.
    2019-05-06 06: 43: 24Z
kaynak yerle┼čtirildi ─░┼čte