আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে জেডএক্সিং লাইব্রেরিটি সরাসরি সংহত করে


140

আমি নিছক হতাশায় এটি লিখছি :) আমাকে একটি অ্যান্ড্রয়েড 1.6 ফোনে একটি স্বতন্ত্র বারকোড স্ক্যানার (ধারণার প্রমাণ হিসাবে) তৈরি করার জন্য নিযুক্ত করা হয়েছে।

এর জন্য আমি জেডএক্সিং লাইব্রেরিটি আবিষ্কার করেছি।

আমি গুগল করেছি, স্ট্যাকওভারফ্লোতে এখানে ব্যবহৃত সাধারণ বিষয়গুলি ব্যবহার করা হয়েছে এবং এরপরেও পড়েছি। কিছুই সাহায্য করেছে বলে মনে হয় নি, এবং আমি কেবল এই মেন্টাল অবরোধের উপর একটি গর্ত ঘুষি দিতে পারি না: /

আমি জানি এটি সম্ভব হবে, lib ব্যবহার করা এবং আপনার নিজস্ব স্ট্যান্ডেলোন বারকোড স্ক্যানার তৈরি করা। আমি পড়েছি যে জক্সিং লোকেরা সরবরাহিত "বারকোড স্ক্যানার" ব্যবহার করা এখন পর্যন্ত সবচেয়ে সহজ সমাধান (ইনটেন্টের মাধ্যমে)। দুর্ভাগ্যক্রমে এটি কোনও বিকল্প নয়, এবং একটি স্বতন্ত্র অ্যাপ্লিকেশনটি পছন্দসই।

সুতরাং আমার সমস্যার সংক্ষিপ্তসার:

  1. Eclipse- এর মাধ্যমে আমার অ্যান্ড্রয়েড কোড প্রকল্পে জেডএক্সিং উত্স লিবকে কীভাবে সংহত করবেন?
  2. যখন ইন্টিগ্রেটেড ... স্ক্যানিং ফাংশনটি "লোড" করতে, কীভাবে lib ব্যবহার করবেন?
  3. নির্দেশিকাটির পদক্ষেপের এক ধাপ প্রায় পছন্দসই কারণ আমি সবেমাত্র গ্রহনে কাজ শুরু করেছি।

আমি আমার কোড প্রকল্পটি জেডএক্সিং উত্স ফোল্ডার থেকে অ্যান্ড্রয়েড ফোল্ডারের উপর নির্ভরশীল করার চেষ্টা করেছি। আমি যখন এটি করি, তখন বেশ কয়েকটি 'org.apache' সম্পর্কিত ??

আমি ঠিক এটি বুঝতে পারি না ... তাই কয়েকটি ইঙ্গিতটি হ'ল সহায়ক।

আগাম, আপনাকে ধন্যবাদ :)


আমি বিশ্বাস করি আপনি যা করতে চেয়েছিলেন তা এখানে পাওয়া যায়: স্ট্যাকওভারফ্লো
ড্যানি রেমিংটন - ওএমএস

বারকোড পড়ার একমাত্র উপায় জেডএক্সিং নয়। ২০১ of সালের হিসাবে অ্যান্ড্রয়েড বারকোড এপিআই ব্যবহার করা অনেক সহজ ।
ড্যান ড্যাসকলেসকু

উত্তর:


127

হালনাগাদ! - সলভড + গাইড

আমি এটি বের করতে পেরেছি :) এবং নীচে আপনি ধাপে ধাপে গাইডটি পড়তে পারেন যাতে আশা করা যায় যে আমার মতো একই সমস্যাটি অন্যদের সহায়তা করতে পারে;)

  1. অ্যাপাচি পিঁপড়া ইনস্টল করুন - ( কনফিগার সাহায্যের জন্য এই ইউটিউব ভিডিওটি দেখুন )
  2. জেডএক্সিং হোমপেজ থেকে জেডএক্সিং উত্সটি ডাউনলোড করুন এবং এটি নিষ্কাশন করুন
  3. উইন্ডোজ কমান্ডলাইন (রান-> সিএমডি) ব্যবহার করে ডাউনলোডের মূল ডিরেক্টরিতে নেভিগেট করুন zxing src
  4. কমান্ডলাইন উইন্ডোতে - ant -f core/build.xmlএন্টার টিপুন টিপুন এবং অ্যাপাচে এটি যাদু করার চেষ্টা করুন [ সমস্যা হচ্ছে? ]
  5. আপনার সদ্য উত্তোলন করা ডিরেক্টরিটিতে অ্যান্ড্রয়েড ফোল্ডারের উপর ভিত্তি করে Eclipse -> নতুন অ্যান্ড্রয়েড প্রকল্প প্রবেশ করুন
  6. প্রকল্প ফোল্ডারে ডান-ক্লিক করুন -> সম্পত্তি -> জাভা বিল্ড পাথ -> গ্রন্থাগার -> বাহ্যিক জারগুলি যুক্ত করুন ...
  7. সদ্য উত্তোলিত ফোল্ডারে নেভিগেট করুন এবং মূল ডিরেক্টরিটি খুলুন এবং নির্বাচন করুন core.jar... এন্টার চাপুন!

এখন আপনাকে কেবল অনুবাদগুলিতে এবং অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে কয়েকটি ত্রুটি সংশোধন করতে হবে :) এখন আপনি আনন্দের সাথে সংকলন করতে পারেন, এবং এখন আপনার কাছে জেডএক্সিং উত্সের ভিত্তিতে একটি কার্যকরী স্ট্যান্ডলোন বারকোড স্ক্যানার অ্যাপ্লিকেশন থাকবে;)

শুভ কোডিং ছেলেরা - আমি আশা করি এটি অন্যকে সহায়তা করতে পারে :)


দুর্দান্ত লেখার! আপনি AndroidManifest.xmlফাইলটিতে যা সম্পাদনা করেছেন তার কিছু বিশদ যুক্ত করতে পারেন ? পরীক্ষার পরে আমি সেই ফাইলটিতে কোনও ত্রুটি দেখতে পাচ্ছি না। ধন্যবাদ!
ব্রায়ান আর্মস্ট্রং

7
অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে ত্রুটি নেই বা অনুবাদও নেই। তবে সর্বশেষতম অ্যান্ড্রয়েড এসডিকে সামঞ্জস্যতার সমস্যা রয়েছে। আপনি যদি এটি ব্যবহার করেন তবে আপনাকে এসভিএন থেকে পরবর্তী উত্স কোড ব্যবহার করতে হবে।
শান ওওন

হাই, আমি কোনও কিউআর ড্রয়েড বা বারকোড স্ক্যানার অ্যাপ্লিকেশন ব্যবহার না করে স্ট্যান্ড স্টোন অ্যাপ হিসাবে কিউআর স্ক্যানিংয়ের জন্য আরও একটি অ্যাপ্লিকেশন বিকাশের চেষ্টা করছিলাম। আপনি যে পদক্ষেপগুলি কেবল তা করার জন্য উল্লেখ করেছেন বা আপনি এখনও অন্য কোনও অ্যাপ্লিকেশন ব্যবহার করতে চলেছেন বা অন্য কোনও কিছুর মাধ্যমে?
কুমার

1
কোড. google.com/p/zxing/downloads/list থেকে জিপ প্যাকেজটিতে "মূল" ডিরেক্টরি পাশাপাশি "অ্যান্ড্রয়েড" এবং "অ্যান্ড্রয়েড-ইন্টিগ্রেশন" রয়েছে। আপনি "কোর" ব্যবহার করার কারণ কী?
মিশা কে

1
ঠিক আছে, এখন আমি জানি কেন। যদি কেউও
Michał K

83

তৃতীয় পক্ষের অ্যাপ্লিকেশনটি ইনস্টল না করে কীভাবে জেডএক্সিং লাইব্রেরি ব্যবহার করে কিউআর কোড উত্পন্ন এবং প্রদর্শন করতে হবে সে সম্পর্কে একটি ধাপে ধাপে নির্দেশিকা এখানে রয়েছে। দ্রষ্টব্য: আপনাকে এএনটি বা অন্য কোনও বিল্ড সরঞ্জাম দিয়ে জেডএক্সিং তৈরি করতে হবে না। ফাইলটি core.jarপ্রকাশিত জিপ সংরক্ষণাগারে পাওয়া যায় (নীচে পড়ুন)।

  1. জেডএক্সিং এর সর্বশেষ প্রকাশটি ডাউনলোড করুন । - ( ZXing-*.zip)
  2. এই zip সংরক্ষণাগার এক্সট্র্যাক্ট এবং এটি core.jarঅধীনে core/ডিরেক্টরি।
  3. আপনি যদি Eclipse IDE ব্যবহার করে থাকেন core.jarতবে libsআপনার Android প্রকল্পের ডিরেক্টরিতে টানুন এবং ছেড়ে দিন drop জিজ্ঞাসা করা হলে, অনুলিপি নির্বাচন করুন ।
  4. আপনার অ্যান্ড্রয়েড প্রকল্পের মূল প্যাকেজে নীচে দেওয়া ( Contents.javaএবং QRCodeEncoder.java) দুটি শ্রেণীর অনুলিপি করুন ।
  5. ImageViewউত্পন্ন কিউআর কোডটি যদি আপনার কাছে ইতিমধ্যে না থাকে তবে প্রদর্শন করতে আপনার ক্রিয়াকলাপে একটি আইটেম তৈরি করুন । নীচে একটি উদাহরণ দেওয়া হল:
  6. বিটম্যাপ ফর্ম্যাটে কিউআর কোড উত্পন্ন করতে এবং এটিতে প্রদর্শিত করতে নীচের কোড স্নিপেট ব্যবহার করুন ImageView

ImageViewআপনার ক্রিয়াকলাপ বিন্যাস এক্সএমএল ফাইলটিতে যুক্ত করার জন্য এখানে একটি উপাদান রয়েছে:

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

টুকিটাকি সংকেতলিপি:

// 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();
}

এখানে 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
    };
}

এবং 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();
    }
}

13
সাম্প্রতিক জেডএক্সিংয়ের কোনও কারণে সেখানে কোর.জার নেই। আমি এটির জন্য 2.1 ডাউনলোড করতে হয়েছিল।
ক্যাপকম

12
core.jar ম্যাভেন মুক্তি সংগ্রহস্থলের মধ্যে আলাদাভাবে পাওয়া যায়, সংস্করণ 2.2 জন্য লিঙ্ক repo1.maven.org/maven2/com/google/zxing/core/2.2/core-2.2.jar
Nantoka

12
জেডক্সিং ২.৩.০ কোর.জার এখানে: repo1.maven.org/maven2/com/google/zxing/core/2.3.0
রুই মার্কস

1
আপনার এনকোডএএসবিটম্যাপ () পদ্ধতিটি যদি শোধিত না হয় বা একটি নলপয়েন্টার এক্সসেপশন ব্যর্থ হয় তবে যদি আমি লাইনটি মন্তব্য করে যা শূন্য হয় ull আমি এই লাইব্রেরিতে নতুন। আমি কি ভুল করছি?
কেজি

2
@ ওয়েসম, এটি সত্যিই সহায়ক ছিল। আপনি কি কোডটিও সরবরাহ করতে পারবেন, যেখানে বিপরীত কাজটি করা যেতে পারে। মানে কিউআর কোডটি আবার স্ট্রিংয়ে রূপান্তর করতে হবে?
শাওন হাসান

15

দ্য

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

দুর্ভাগ্যক্রমে আমার জন্য কাজ করেনি।

এটিই আমার পক্ষে কাজ করেছে:

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

এখানে লিঙ্কটি সন্ধান করুন: https://github.com/journeyapps/zxing-android- এম্বেড


1
এই উত্তরটি এখানে অন্যান্য উত্তর দ্বারা বামন করা হয়। বেশিরভাগ স্ক্রিন শট এবং এই জাতীয় সঙ্গে। এটি লজ্জাজনক কারণ এটি কেবলমাত্র উত্তর যা আসলে কাজ করে! এই এক মনোযোগ দিন। তিনি যা উল্লেখ করেননি তা হল লিঙ্কযুক্ত প্রকল্পটি এমন একটি শাখা যেখানে কেউ এই কঠিন লাইব্রেরিকে লাইব্রেরি ব্যবহারের জন্য সহজ (এবং এটি আসলে সহজ) তৈরি করেছিলেন into সাধারণ জেডএক্সিং প্রকল্প থেকে কেবল মূল জারটি ডাউনলোড করুন এবং আপনি যেতে ভাল। এমনকি উদাহরণ আছে !!!!
স্টারউইন্ড0

1
আমি আশা করি আমি আরও উপার্জন দিতে পারে। কয়েক বছর ধরে আমি বিভিন্ন প্রকল্পে এটি বের করার চেষ্টা করেছি বলে আপনার কোনও ধারণা নেই।
স্টারউইন্ড0

1
আমি ছেলেদের সেবা করে আনন্দিত :)
করলি

11

এএনটি নিয়ে সমস্যা তৈরি হচ্ছে? পড়তে থাকুন

যদি ant -f core/build.xml কিছু বলে:

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

তারপরে আপনার JAVA_HOMEপরিবেশের পরিবর্তনশীলটিকে যথাযথ জাভা ফোল্ডারে সেট করুন । আমি আমার (উইন্ডোজের জন্য) সরঞ্জামগুলি.জার পেয়েছি:

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

সুতরাং আমি আমার সেট JAVA_HOME:

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

সংক্ষিপ্ত বাক্য গঠন করার কারণটি আমি কোনও সাইটে পেয়েছি যা বলে:

"আপনাকে দৃ advised়ভাবে পরামর্শ দেওয়া হচ্ছে যে আপনি একটি ইনস্টলেশন ডিরেক্টরি বেছে নিন যা পথের নামের সাথে শূন্যস্থান অন্তর্ভুক্ত করবে না (উদাহরণস্বরূপ, সি: \ প্রোগ্রাম ফাইলগুলিতে ইনস্টল করবেন না।) যদি জাভা এই জাতীয় ডিরেক্টরিতে ইনস্টল করা থাকে তবে জাএএভিএহোম সেট করা সমালোচিত কোনও পথের পরিবেশের পরিবর্তনশীল যা স্পেসগুলি অন্তর্ভুক্ত করে না (উদাঃ, সি: gra প্রগা ~ 1); এটি করতে ব্যর্থ হওয়ার ফলে কিছু প্রোগ্রামের দ্বারা ব্যতিক্রম হবে যা জাভাবাহোমের মান নির্ভর করে। "

আমি তখন সেন্টিমিডি পুনরায় চালু করেছি (গুরুত্বপূর্ণ কারণ ডস শেলটি কেবল প্রবর্তনের সময় এনভি ভার্স পড়তে পারে, সুতরাং এনভির ভার পরিবর্তনের জন্য আপনাকে আপডেট করা মান পেতে একটি নতুন শেল ব্যবহার করা প্রয়োজন)

এবং অবশেষে ant -f core/build.xmlকাজ।


11

যেহেতু কয়েকটি উত্তর পুরানো হয়েছে, তাই আমি আমার নিজস্ব সরবরাহ করতে চাই -

তাদের উইকির পরামর্শ অনুসারে জেডএক্সিং গ্রন্থাগারটি আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে সংহত করতে , আপনাকে আপনার প্রকল্পে 2 টি জাভা ফাইল যুক্ত করতে হবে:

তারপরে অ্যান্ড্রয়েড স্টুডিওতে বিল্ড.gradle ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করুন:

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

বা এখনও যদি এডিটি-প্লাগইন সহ Eclipse ব্যবহার করা হয় তবে আপনার প্রকল্পের libs সাব-ডিরেক্টরিতে কোর.জার ফাইল যুক্ত করুন (এখানে ফুলস্ক্রিন উইন্ডোজ এবং ফুলস্ক্রিন ম্যাক ):

উইন্ডোজ স্ক্রিনশট

অবশেষে আপনার মেইনএকটিভিটি.জভাতে এই কোডটি যুক্ত করুন :

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();
}

ফলাফলযুক্ত অ্যাপ্লিকেশনটি জেডএক্সিংয়ের মাধ্যমে বারকোড স্ক্যানার অ্যাপ্লিকেশন ইনস্টল এবং শুরু করতে বলবে (যা স্ক্যানের পরে আপনার অ্যাপ্লিকেশনটিতে স্বয়ংক্রিয়ভাবে ফিরে আসবে):

বারকোড স্ক্যানার অ্যাপ

তদতিরিক্ত, যদি আপনি নিজের অ্যাপ্লিকেশনের অনুপ্রেরণা হিসাবে জেডএক্সিং টেস্ট অ্যাপটি তৈরি এবং পরিচালনা করতে চান :

জেডএক্সিং টেস্ট অ্যাপ্লিকেশন

তারপরে গিটহাব থেকে আপনার 4 টি জাভা ফাইলের প্রয়োজন :

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

এবং মাভেন সংগ্রহশালা থেকে 3 জার ফাইল :

  • core.jar
  • অ্যান্ড্রয়েড-core.jar
  • অ্যান্ড্রয়েড-integration.jar

(আপনি জার ফাইল নিজের সঙ্গে নির্মাণ করতে পারেন mvn package- যদি GitHub থেকে বের ZXing আপনার চেক এবং ইনস্টল পিপীলিকা এবং ম্যাভেন আপনার কম্পিউটার এ টুলস)।

দ্রষ্টব্য: যদি আপনার প্রকল্পটি জার ফাইলগুলি স্বীকৃতি না দেয় তবে আপনাকে প্রকল্পের বৈশিষ্ট্যে জাভা সংস্করণ আপ করতে হবে:

বৈশিষ্ট্য স্ক্রিনশট


2
এটি একটি দুর্দান্ত উত্তর!
পরেশ মায়ানী

3
আমি ভয়ের সাথে এই প্রশ্নের বিন্দুটি মিস করেছি :-( বাহ্যিক অ্যাপ্লিকেশনটির উপর নির্ভর করা উচিত নয়। এটি কীভাবে .. বাহ্যিক অ্যাপ্লিকেশনটি ব্যবহার করবেন তা দেখায়? প্রশ্নটির শিরোনামে "সরাসরি ইন" দেখুন
স্টারউইন্ড 0

5

রাখুন

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

আপনার গ্রেডল নির্ভরতা মধ্যে। যত সহজ। অ্যান্ড্রয়েড স্টুডিও এবং গ্রেডল বিল্ড সিস্টেম ব্যবহার করার আগে।


রাইট! এটিই আসল সমাধান ২০১৫ B বর্তমান সংস্করণটি ৩.২.০
ফানকোডার

এটি কারও পক্ষে কাজ করেছে? IntentIntegrator এখনও খুঁজে পাওয়া যাবে না
Karoly

আপনার নিজের অ্যান্ড্রয়েড স্টুডিও প্রকল্পে IntentIntegrator.java এবং IntentResult.java ফাইলগুলি ম্যানুয়ালি অনুলিপি করা উচিত ।
আলেকজান্ডার ফারবার

4

আপনি কি জেক্সিং ওয়েবসাইটে উইকি পৃষ্ঠাগুলি দেখেছেন ? দেখে মনে হচ্ছে আপনি গেটিংস্টার্ড , ডেভেলপার নোটস এবং স্ক্যানিংভিয়াআইন্টেন্টকে সহায়ক বলে মনে করতে পারেন ।


দুঃখিত ... এটি আমি যে সাহায্যটি সন্ধান করছিলাম এটি তেমন ছিল না :) তবে আজ আমার একটি অগ্রগতি হয়েছিল: পিআই নিজেই তা বের করতে পেরেছিলেন;) একই সমস্যা সহ অন্যান্য দর্শকদের জন্য একটি গাইড খুব শীঘ্রই পোস্ট করা হবে :)
অ্যাপডেভ

2

আপনার যদি জেক্সিং থেকে কেবল কোর.জার প্রয়োজন হয় তবে আপনি এই প্রক্রিয়াটি এড়িয়ে যেতে এবং গেটিংস্টার্ড উইকি পৃষ্ঠা থেকে প্রাক-নির্মিত জারগুলি পেতে পারেন

সর্বশেষ জেডএক্সিং (২.২) এর মূল ফোল্ডারের অধীনে কোর.জার নেই তবে আপনি এখানে জেক্সিং ম্যাভেন সংগ্রহশালা থেকে কোর.জার পেতে পারেন here


2

গ্রহণায় ৩.২.১ জেক্সিং সেটআপে ধাপে ধাপে

  1. " Https://github.com/zxing/zxing " থেকে zxing-master.zip ডাউনলোড করুন
  2. Zxing-master.zip আনজিপ করুন, জক্সিং-মাস্টারে "অ্যান্ড্রয়েড" প্রকল্পটি আমদানি করার জন্য গ্রহপ ব্যবহার করুন
  3. " Http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/ " থেকে কোর-3.2.1.jar ডাউনলোড করুন
  4. "অ্যান্ড্রয়েড" প্রকল্পে "libs" ফোল্ডার তৈরি করুন এবং Cor-3.2.1.jar কে libs ফোল্ডারে পেস্ট করুন
  5. প্রকল্পে ক্লিক করুন: "বৈশিষ্ট্যগুলি" -> "জাভা সংকলক" স্তরটি 1.7 এ পরিবর্তন করতে বেছে নিন। তারপরে অ্যান্ড্রয়েড ৪.৪.২++ এ "অ্যান্ড্রয়েড" পরিবর্তন "প্রজেক্ট বিল্ড লক্ষ্য" ক্লিক করুন, কারণ 1.7 ব্যবহারের জন্য অ্যান্ড্রয়েড ৪.৪ সহ সংকলন প্রয়োজন
  6. যদি "zxing-master / android / app / src / main / java / com / google / zxing / ক্লায়েন্ট / অ্যান্ড্রয়েড / ক্যামেরা /" তে "ক্যামেরা-কনফিগারেশনUtils.java" বিদ্যমান না থাকে। আপনি এটিকে "জ্যাক্সিং-মাস্টার / অ্যান্ড্রয়েড-কোর / এসসিআর / প্রধান / জাভা / কম / গুগল / জ্যাক্সিং / ক্লায়েন্ট / অ্যান্ড্রয়েড / ক্যামেরা /" থেকে অনুলিপি করতে পারেন এবং আপনার প্রকল্পে আটকান।
  7. প্রকল্পটি পরিষ্কার এবং বিল্ড করুন। যদি আপনার প্রকল্পটি "স্যুইচ - কেস" সম্পর্কে ত্রুটি দেখায়, আপনার সেগুলি "যদি - অন্যথায়" পরিবর্তন করা উচিত।
  8. সমাপ্ত। প্রকল্পটি পরিষ্কার এবং বিল্ড করুন।
  9. রেফারেন্স লিঙ্ক: অ্যান্ড্রয়েড বারকোড স্ক্যানিং অ্যাপ্লিকেশন তৈরি করতে জেডএক্সিং ব্যবহার করা

2

আমি এটি অর্জনের জন্য সমস্ত সম্ভাব্য উপায়ে চেষ্টা করেছি এবং তারপরে আমি জার্নি অ্যাপস দ্বারা xZing এর মিনিফাইন্ড সংস্করণটি আবিষ্কার করেছি। আমি এটি গ্রহণের জন্য পোর্ট করেছি এবং গিটহাবে শেয়ার করেছি।

আপনি যদি গ্রহপ ব্যবহার করছেন তবে এই প্রকল্পটি ব্যবহার করুন: -

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

আপনি যদি স্টুডিও ব্যবহার করেন তবে এই প্রকল্পটি ব্যবহার করুন: -

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

সুবিধাদি

  1. আপনার অ্যাপ্লিকেশন ইনবিল্ট বারকোড স্ক্যানার প্লেস্টোর ব্যবহার করে তৃতীয় পক্ষের অ্যাপ্লিকেশন ইনস্টল করার প্রয়োজন নেই।

  2. আপনি কোর, অ্যান্ড্রয়েড ক্লায়েন্ট ইত্যাদি জারের মধ্যে বিভ্রান্ত হওয়ার দরকার নেই কেবল এই প্যাকেজগুলি ফেলে দিন এবং আপনার প্রকল্পে লেলাউন্টগুলি সুসংগত করুন এবং আপনি যেতে ভাল to শুধুমাত্র জারের প্রয়োজনীয় com.google.zxing: কোর: 3.2.0 যা আপনি ডাউনলোড করতে পারেন

    http://mvnrepository.com/artifact/com.google.zxing/core/3.2.0

  3. তুলনা করার জন্য নীচে চিত্র দেখতে প্যাকেজ টন যোগ করার প্রয়োজন নেই

আগে :-

এখানে চিত্র বর্ণনা লিখুন

পরে: -

এখানে চিত্র বর্ণনা লিখুন

  1. সর্বাধিক গুরুত্বপূর্ণ অংশটি হ'ল তারা অত্যন্ত স্বনির্ধারিত অর্থাৎ। আপনি ফ্ল্যাশ লাইট যুক্ত করতে পারেন, এটি খণ্ডে ব্যবহার করতে পারেন এবং ওরিয়েন্টেশন পরিবর্তনকে সমর্থন করতে পারেন।

  2. বারকোড স্ক্যানিংয়ের জন্য আপনি কর্ডোভা অ্যাপে এই ক্যাপচার ক্রিয়াকলাপটি ব্যবহার করতে পারেন ।

অ্যাপ্লিকেশন ম্যানিফেস্টে আপনার ক্যাপচার ক্রিয়াকলাপটি এর মতো দেখায়

  <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>

এবং প্লাগইন এটির মতো দেখাবে

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");
            }
        }
    }
}

হ্যাপি ইন্টিগ্রেশন !!


2

জ্যাক্সিং ছেলেরা 1.7 দিয়ে অ্যান্ড্রয়েড প্রকল্প তৈরি করা সহজ করেছে। এটি আগের মতো বেদনাদায়ক নয়। এটি যে কেউ অ্যান্ড্রয়েডের জন্য দ্রুত একটি জক্সিং প্রকল্প তৈরি করতে চান তাদের জন্য একটি দ্রুত ব্লগ।

  • Zxing.org থেকে জ্যাক্সিং উত্সগুলি চেকআউট করুন
  • আপনার গ্রহনে একটি অ্যান্ড্রয়েড প্রকল্প তৈরি করুন
  • Main.xml মুছুন
  • "Src" ডিরেক্টরিতে রাইট ক্লিক করুন এবং আমদানি করুন। উল্লিখিত ক্রমে নিম্নলিখিত ডিরেক্টরিগুলিতে ব্রাউজ করুন। আপনি একে একে আমদানির জন্য যুক্ত করার পরে, আমদানি উইজার্ডের সম্পাদনা ক্ষেত্রে আপনার কাছে src ডিরেক্টরি রয়েছে তা নিশ্চিত করুন। এবং আপনি যে বাম ডিরেক্টরি ট্রিতে কেবল "কম" ডিরেক্টরি নির্বাচন করেছেন। Src নির্বাচন করবেন না।
  • মূল
  • অ্যান্ড্রয়েড-ইন্টিগ্রেশন
  • অ্যান্ড্রয়েড
  • আপনার অ্যান্ড্রয়েড sdk সংস্করণ 9 হয় তা নিশ্চিত করুন, কম কিছু এবং androidmanifest.xML কাঁদবে।
  • যে কোনও একটি ভাষাতে স্ট্রিংস.এক্সএমএল 'ক্যারেক্টার' কেবল একটি / আগে রাখবে

Zxing 1.7 (20 জুন চেকআউট) এর জন্য একটি অ্যান্ড্রয়েড প্রকল্প।

http://www.4shared.com/file/bFx8Y5Ys/zXingJune2010.html (আর কোনও উপলভ্য নয় )


2

কেন একটি বাহ্যিক lib ব্যবহার করুন, যখন গুগল প্লে পরিষেবাদি ( 7..৮.০ সংস্করণ থেকে ) একটি বারকোড ডিকোডার অন্তর্ভুক্ত।


1
আপনি চীনে গুগল প্লে পরিষেবা ইনস্টল করতে পারবেন না, কারণ গুগল অবরুদ্ধ।
Xiè Jìléi

আপনার যদি গুগল প্লে পরিষেবাদি ভাগ্যক্রমে ইনস্টল করা থাকে তবে আপনি এখনও এটি চীনে ব্যবহার করতে পারবেন না, কারণ গুগল অবরুদ্ধ।
Xiè Jìléi

2

আমি শুধু একটি পদ্ধতি, যা উত্পন্ন decodes বার-কোড, লিখেছেন Bitmapকরতে String

এটি ঠিক যা অনুরোধ করা হচ্ছে ঠিক তা করে CaptureActivity...

অতএব, একটি android-integrationলাইব্রেরি এড়িয়ে যেতে পারেন build.gradle:

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')
}

নিম্নলিখিত হিসাবে পদ্ধতি (যা আসলে একটি জুনিত পরীক্ষার মধ্যে বার-কোডগুলি উত্পন্ন করে ডিকোড করে):

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;
}


0

আমি সম্প্রতি আইওএস এবং অ্যান্ড্রয়েড উভয় ক্ষেত্রেই গুগল মোবাইল দৃষ্টি ব্যবহার করেছি। আমি গুগল বারকোড স্ক্যান ব্যবহার করার পরামর্শ দিচ্ছি। এটি কোনও অভিমুখীকরণের সাথে বেশ প্রতিক্রিয়াশীল এবং প্রক্রিয়াকরণের সময়টি খুব দ্রুত। একে গুগল মোবাইল ভিশন বলা হয়।

বারকোড স্ক্যানার এপিআই কোনও ওরিয়েন্টেশনে রিয়েল টাইমে বারকোডগুলি সনাক্ত করে। আপনি একই সাথে বিভিন্ন বিন্যাসে বেশ কয়েকটি বারকোড সনাক্ত এবং পার্স করতে পারেন।

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

https://codelabs.developers.google.com/codelabs/bar-codes/#0


0

অনেক সহজ পদ্ধতির।

আপনার অ্যাপ স্তরের গ্রেড ফাইলটিতে কেবল নির্ভরতা অন্তর্ভুক্ত করুন

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

আপনার এক্সএমএল ফাইলে একটি বোতাম সংজ্ঞায়িত করুন এবং জাঙ্কিয়া ফাইলটিতে অনক্রিয়েট () তে এবং বোতামের অনক্লিক শ্রোতার ভিতরে লিখুন

new IntentIntegrator(this).initiateScan();

এবং জাভা ফাইলের অনক্রিয়েট () এর পরে কোডের নীচে লিখুন

@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();

        }
    }

}

st_scanned_resultএখানে সংজ্ঞায়িত করা হয় নি
কেলালাকা

এটি স্ট্রিং টাইপের একটি বৈশ্বিক পরিবর্তনশীল। আপনি যদি এই অন্টিভিটিআরসাল্ট () এর বাইরে স্ক্যান করা ফলাফল ব্যবহার না করে থাকেন তবে আপনি স্থানীয়ভাবে এটি সংজ্ঞায়িত করতে পারেন। স্ট্রিং পছন্দ করুন st_scanned_result = ফলাফল.getContents (); আমি এটি আপডেট করেছি plz chk।
তারা

0

2020 আপডেট: কেবল এটি আপনার গ্রেডল ফাইলটিতে যুক্ত করুন। এটি পুরোপুরি কাজ করে!

repositories {
   jcenter()
}
implementation 'me.dm7.barcodescanner:zxing:1.9.13'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.