Реализация сканера штрих-кода в Android

Я делаю приложение в Android, которое читает сканер штрих-кода.

Есть ли способ реализовать сканер штрих-кода?

Приложение должно открыть камеру и сделать снимок штрих-кода.

После сканирования он дает мне код, который я отправлю на службу для поиска в моей базе данных.

Как мне этого добиться?

ОБНОВЛЕНО:

У меня есть этот файл IntentIntegrator.java для интеграции.

Как я могу использовать этот API?

Ответ 1

Попробуйте Zxing

ZXing (произносится как "переход зебры" ) с открытым исходным кодом, многоформатный 1D/2D библиотека обработки изображений штрих-кодов реализованный на Java. Мы сосредоточены на использование встроенной камеры на мобильных устройствах телефоны для фотографирования и декодирования штрих-коды на устройстве, без связь с сервером.

Ответ 2

Обновление 2016

В настоящее время рекомендуется использовать Android Barcode API, который работает локально (offline), без, требующих серверного перехода. API является частью

Ответ 3

Я настоятельно рекомендую использовать эту библиотеку: https://github.com/dm77/barcodescanner

Он устраняет все сумасшедшие проблемы сборки, с которыми вы столкнетесь, пытаясь напрямую интегрировать XZing или Zbar. Он использует эти библиотеки под обложками, но оборачивает их в очень простой в использовании API.

Ответ 5

Я тоже пытался сделать то же самое, но потом во время НИОКР я нашел много библиотек для сканирования QR-кодов и штрих-кодов. Некоторые из них приведены ниже:

  1. QRGenerator

  2. QRParserLib

  3. QRGen

  4. QReader

  5. QRCodeReaderView

  6. Сканер штрих-кода

  7. Android-быстродействующий код

  8. MaterialBarcodeScanner

Таким образом, вы можете использовать любой.

Ответ 6

Используйте библиотеку zxing. Код и примеры можно найти на этом сайте.

Ответ 8

Ища альтернативу ZXing в интернете, я нашел Zbar. Правда в том, что я знал, что это было для iOS, но я не знал, что это было и для Android.

Правда в том, что худшее из ZXing - это то, что он работает очень медленно и загружает приложение многими.

Zbar, это файл JAR. Копирует в библиотеки и вуаля, импортирует в другие проекты... очень хорошо.

Ответ 9

ZXing (произносится как "зебра") - это многоформатная библиотека для обработки изображений 1D/2D штрих-кодов с открытым исходным кодом, реализованная на Java. Наше внимание сосредоточено на использовании встроенной камеры на мобильных телефонах для фотографирования и декодирования штрих-кодов на устройстве без связи с сервером.

Код

compile 'me.dm7.barcodescanner:zxing:1.8.4'


import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;

import com.google.zxing.Result;

import org.json.JSONException;
import org.json.JSONObject;

import java.net.NetworkInterface;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

import me.dm7.barcodescanner.zxing.ZXingScannerView;

public class MainActivity extends Activity implements ZXingScannerView.ResultHandler {

    private ZXingScannerView mScannerView;
    String locationAddress;

    private Dialog mDialog;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // TODO: Android 6.0 (Marshmallow) permissions

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
                    Manifest.permission.CAMERA);

            if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
                Log.e("permission", "granted");
                //callLocation();
            }
            else {
                ActivityCompat.requestPermissions(
                    MainActivity.this,
                    new String[] { Manifest.permission.CAMERA,
                                   Manifest.permission.ACCESS_FINE_LOCATION,
                                   Manifest.permission.ACCESS_COARSE_LOCATION
                                 },
                    1);
            }
        }
        else {
            Log.e("MainActivity", "Lower Than Marshmallow");
        }
    }

    public void onClick(View v) {

        mScannerView = new ZXingScannerView(this);
        setContentView(mScannerView);
        mScannerView.setResultHandler(this);
        mScannerView.startCamera();
        Log.w("MainActivity", "onClick");
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (mScannerView != null) {
            mScannerView.stopCamera();
            Intent i = new Intent(MainActivity.this, MainActivity.class);
            startActivity(i);
        }
        Log.w("MainActivity", "onPause");
    }

    @Override
    public void handleResult(Result result) {

        // Do anything with 'result' here :D
        Log.w("MainActivity", "handleResult" + result.getText());

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Scan result");
        builder.setMessage(result.getText());
        AlertDialog alertDialog = builder.create();
        alertDialog.show();

        if (CommonMethod.isNetworkAvailable(MainActivity.this)) {
            send(result.getText());
        }

        //Resume scanning
        //mScannerView.resumeCameraPreview(this);
    }

}

, ,

    @Override
    protected void onResume() {
        super.onResume();

        Log.e("Keshav", "MainActivity onResume called ");

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            int permissionCheck = ContextCompat.checkSelfPermission(
                                      MainActivity.this,
                                      Manifest.permission.CAMERA);

            if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
                Log.e("permission", "granted");
                    //callLocation();
            }
            else {
                ActivityCompat.requestPermissions(
                    MainActivity.this,
                    new String[] { Manifest.permission.CAMERA,
                                   Manifest.permission.ACCESS_FINE_LOCATION,
                                   Manifest.permission.ACCESS_COARSE_LOCATION},
                    1);
            }
        }
        else {
            Log.e("MainActivity on Resume ", "Lower Than Marshmallow");
        }
    }
}

Ответ 10

Измените файл build.gradle(App) и добавьте ниже зависимости:

compile 'com.journeyapps:zxing-android-embedded:3.4.0'

Объявить ниже переменную в классе Activity:

IntentIntegrator qrScan

В методе OnCreate напишите ниже код:

    qrScan = new IntentIntegrator(this);
qrScan.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);

Создайте кнопку и свою кнопку, как показано ниже:

  public void startScan(View view) {
qrScan.initiateScan();
}

Теперь он запустит Сканирование, но для чтения результата требуется ниже метод: Таким образом, вы можете использовать метод OnActivityResult, например, ниже того же действия:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) {
    if (result.getContents() == null) {
        Toast.makeText(this, "Result Not Found", Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(this, result.getContents() ,Toast.LENGTH_LONG).show();
        txt.setText(result.getContents());
        qrScan.initiateScan();
    }
}

}

Не пытайтесь создать кнопку и TextView в вашем XML файле той же Activity. См. Ниже ссылку, это даст вам больше идей в простой форме. https://www.simplifiedcoding.net/android-qr-code-scanner-tutorial/

Ответ 11

https://github.com/fanrunqi/ZxingView

может быть, это может помочь вам

Нужно всего лишь добавить несколько строк кода, чтобы получить возможность.