Реализация сканера штрих-кода в 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.
Ответ 4
Если вы хотите включить код и не использовать IntegratorIntent, который рекомендует библиотека ZXing, вы можете использовать некоторые из этих портов:
Я использую первый, и он отлично работает!
Ответ 5
Я тоже пытался сделать то же самое, но потом во время НИОКР я нашел много библиотек для сканирования QR-кодов и штрих-кодов. Некоторые из них приведены ниже:
-
QRGenerator
-
QRParserLib
-
QRGen
-
QReader
-
QRCodeReaderView
-
Сканер штрих-кода
-
Android-быстродействующий код
-
MaterialBarcodeScanner
Таким образом, вы можете использовать любой.
Ответ 6
Используйте библиотеку zxing. Код и примеры можно найти на этом сайте.
Ответ 7
Пожалуйста, ознакомьтесь с ответом на вопрос о переполнении стека. Android: Как использовать QR-код на основе 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
может быть, это может помочь вам
Нужно всего лишь добавить несколько строк кода, чтобы получить возможность.