Считыватель штрих-кода/Qr-кода для Android [закрыт]

Я хотел бы реализовать считыватель QR-кода/штрих-кода в своем приложении. Я хотел бы знать, какое самое легкое решение для этого (без учета интегратора намерений от zxing).


person user1437481    schedule 10.12.2012    source источник
comment
что не так с интегратором намерений от zxing?   -  person kjurkovic    schedule 10.12.2012
comment
я не хочу, чтобы пользователи покидали приложение, чтобы загрузить сканер штрих-кода, я хочу решение в приложении   -  person user1437481    schedule 10.12.2012
comment
Zxing предоставляет полный код, который можно интегрировать с вашим приложением.   -  person Anand Tiwari    schedule 10.12.2012
comment
вы можете использовать zxing как часть своего приложения. Просто добавьте его как библиотеку и используйте, вызывая намерение захвата.   -  person Adrián Rodríguez    schedule 10.12.2012
comment
jmanzano.es/blog/?p=244 вы можете посмотреть учебник   -  person Talha    schedule 10.12.2012
comment
Даже если вы кажетесь категорически против этого, интеграция Intent — лучшее решение. Если вы (и все остальные) включаете копии библиотек декодирования в свои собственные проекты, конечным результатом будет то, что пользователь получит несколько копий библиотек декодирования в отдельных приложениях, которые тратят место на своем устройстве. Вся система (Android) построена на идее использования намерений таким образом, вы должны принять ее, ИМО.   -  person FoamyGuy    schedule 10.12.2012
comment
@FoamyGuy ваш босс будет недоволен, когда пользователю придется выйти из приложения, чтобы загрузить стороннее приложение для сканирования.   -  person wtsang02    schedule 10.12.2012
comment
@ wtsang02 Я интегрировался через намерения каждый раз, когда мне приходилось включать сканирование в проект ... У меня не было возражений ни от кого, на кого я работал.   -  person FoamyGuy    schedule 10.12.2012
comment
Я понимаю, что намерения - лучший вариант, поскольку Android позволяет использовать такое модульное кодирование, но это не мое приложение, я просто делаю то, что мне сказали. Я ищу другое решение.   -  person user1437481    schedule 10.12.2012
comment
@Talha Ссылка, которую вы разместили, не работает. Вы можете найти новый здесь: jmanzano.me/< /а>   -  person Javier Manzano    schedule 08.08.2014


Ответы (3)


Я использовал zxing для встраивания в свое приложение. Вам понадобится немного кодирования. Сначала включите core.jar по адресу core/core.jar в путь сборки, затем перейдите к их клиенту по адресу android/..../com.google.zxing и получите их код (это не рекомендуется разработчики, потому что вы копируете и вставляете.) Наконец, добавьте этот код:

   package com.wtsang02.activities;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

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.common.HybridBinarizer;


public class QRDecoder extends Activity implements OnClickListener {

    private String text;
    private Button webbutton;
    private Bitmap bmp;
    private ImageView ivPicture;
    private TextView textv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mysales);
        webbutton = (Button)findViewById(R.id.webbutton);

        ivPicture = (ImageView) findViewById(R.id.ivPicture);
        textv= (TextView) findViewById(R.id.mytext);

        webbutton.setOnClickListener(this);
    }

    private void decode() {


        if (bmp == null) {
            Log.i("tag", "wtf");
        }
        bmp = bmp.copy(Bitmap.Config.ARGB_8888, true);

        int[] intArray = new int[bmp.getWidth() * bmp.getHeight()];
        bmp.getPixels(intArray, 0, bmp.getWidth(), 0, 0, bmp.getWidth(),
                bmp.getHeight());

        LuminanceSource source = new com.google.zxing.RGBLuminanceSource(
                bmp.getWidth(), bmp.getHeight(), intArray);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        Reader reader = new MultiFormatReader();
        try {
            Result result = reader.decode(bitmap);

            text = result.getText();
            byte[] rawBytes = result.getRawBytes();
            BarcodeFormat format = result.getBarcodeFormat();
            ResultPoint[] points = result.getResultPoints();
            textv.setText(text);

        } catch (NotFoundException e) {

            e.printStackTrace();
        } catch (ChecksumException e) {

            e.printStackTrace();
        } catch (FormatException e) {

            e.printStackTrace();

        }
        Log.i("done", "done");
        if(text!=null)
        Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG).show();
        else{
            Toast.makeText(getBaseContext(), "QQ", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onClick(View v) {

        Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(i, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            bmp = (Bitmap) extras.get("data");
            ivPicture.setImageBitmap(bmp);
            decode();
        }

    }

}

Этот код будет использовать камеру вашего телефона по умолчанию, если вам нужно использовать их клиент, вам нужно будет запустить их CaptureActivity, ваш макет должен включать TextView для отображения результатов, ImageView для отображения снятого вами изображения и Button для запуска камеры. . Это основано на 2.1zxing.

person wtsang02    schedule 10.12.2012
comment
получить какой код от клиента? я неправильно понял эту часть - person user1437481; 10.12.2012
comment
+1 за демонстрацию того, как создать простое новое приложение вместо полного копирования приложения сканера штрих-кода. - person Sean Owen; 10.12.2012
comment
обновил пост, где я указываю место. В основном все в zip-файле, куда вы скачали zxing2.1. - person wtsang02; 10.12.2012
comment
Этот код выдает мне исключение, как только он запускается, и приложение вылетает :( - person tejas; 12.02.2013
comment
com.google.zxing.NotFoundException, меня попросили добавить это исключение при написании строк LuminanceSource source = new RGBLuminanceSource(200, 200, intArray); Bitmap BinaryBitmap = new BinaryBitmap (новый HybridBinarizer (источник)); Читатель читатель = новый MultiFormatReader(); Результат результата = reader.decode(bitmap); - person tejas; 12.02.2013
comment
Пока я отлаживал его, я обнаружил, что растровый объект имеет значение null. Я имею в виду, что матрица имеет значение null. Таким образом, при декодировании возникает исключение Result result = reader.decode(bitmap); - person tejas; 12.02.2013
comment
Я выполнил точные шаги, упомянутые вами. Изображение захватывается и настраивается для просмотра изображения, но только при декодировании это дает мне проблему, и текст строки становится нулевым, а блок выполняется - person tejas; 12.02.2013
comment
Если вы получаете NotFoundExcetion , 2 причины, 1) правильно ли вы импортировали библиотеку? 2) вы добавили активность в свой манифест? Поскольку именно этот код работает на моем устройстве, я не думаю, что проблема в коде. - person wtsang02; 12.02.2013

Ты можешь использовать:

  • zbar (хороший пример есть в SDK).
  • zxing
person Artyom Kiriliyk    schedule 11.12.2012

Привет, загрузите образец сканера штрих-кода Biggu по этой ссылке, извлеките демонстрационный проект и импортируйте его в eclipse. В zip-файле есть демонстрационный пример, который вы можете использовать и интегрировать в свое приложение в соответствии с вашими требованиями.

person TNR    schedule 10.12.2012
comment
попробую через минуту - person user1437481; 10.12.2012
comment
не могу выбрать QR или BARCODE только на этом - person user1437481; 10.12.2012