在android中实现条码扫描器

我正在android读取条码扫描器的应用程序。

有什么办法可以实现条形码扫描仪?

应用程序应该打开相机并拍摄BarCode的图像。

扫描后,它给了我的代码,我将发送到我的服务在我的数据库中search。

我怎么能做到这一点? 请引导我的朋友。

更新:

我有这个文件IntentIntegrator.java来集成。

我怎样才能使用这个APi?

Solutions Collecting From Web of "在android中实现条码扫描器"

尝试Zxing

ZXing(发音为“斑马线”)是一种用Java实现的开源多格式1D / 2D条形码image processing库。 我们的重点是使用手机上的内置摄像头拍摄和解码设备上的条形码,而无需与服务器通信。

2016年更新

目前的build议是使用本地 (离线)工作的Android Barcode API , 而不需要服务器往返。 该API是2015年8月随Google Play Services 7.8发布的Mobile Vision API的一部分。

条形码API以任何方向实时检测设备上的条形码。 它也可以一次检测多个条形码。

它读取以下条形码格式:

  • 一维条码:EAN-13,EAN-8,UPC-A,UPC-E,Code-39,Code-93,Code-128,ITF,Codabar
  • 二维条码:QR Code,Data Matrix,PDF-417,AZTEC

它会自动parsingQR码,Data Matrix,PDF-417和Aztec值,以下支持的格式:

  • url
  • 联系信息(VCARD等)
  • 日历活动
  • 电子邮件
  • 电话
  • 短信
  • 国际标准书号
  • 无线上网
  • 地理位置(经度和纬度)
  • AAMVA驾驶执照/身份证

请通过以下链接发布答案: android:如何使用基于zxing的qr代码与内置扫描器

如果你想包含代码,而不是使用Zxing库推荐的IntegratorIntent,你可以使用一些这个端口

http://code.google.com/p/android-zxinglib/

http://code.google.com/p/android-quick-response-code/

我用第一,完美的作品!

我强烈build议使用这个库: https : //github.com/dm77/barcodescanner

它带走了所有你试图直接整合Xzing或Zbar的疯狂构build问题。 它使用这些封装下的库,但将它们封装在一个非常简单的API中。

使用zxing库。 代码和示例可以在该网站上find。

ZXing(发音为“斑马线”)是一种用Java实现的开源多格式1D / 2D条形码image processing库。 我们的重点是使用手机上的内置摄像头拍摄和解码设备上的条形码,而无需与服务器通信。

 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 MARSHMALLOW权限

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

编辑build.gradle(App)文件并添加下面的依赖关系:

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

在Activity类中声明下面的variables:

 IntentIntegrator qrScan 

在OnCreate方法中写下面的代码:

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

创build一个button和你的buttonfunction如下所示:

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

现在,它将开始扫描,但它需要下面的方法来读取结果:因此,像以下相同的活动ovveride的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(); } } 

}

不要阻止在同一个Activity的XML文件中创buildbutton和TextView。 请参阅下面的链接它会给你更多的想法在简单的forms。 https://www.simplifiedcoding.net/android-qr-code-scanner-tutorial/

在互联网寻找替代zxing,我发现这个zbar 。 我知道的iOS的事实,但不知道他也是Android。

事实是最糟糕的,非常非常缓慢和加载与许多应用程序,

Zbar ,是一个。 jar子里,它复制在libs和瞧,出口到其他项目…非常好

我也试图做相同的比在R&D期间R&D我发现许多库扫描QR codeBar Code一些在下面给出:

1- QRGenerator

2- QRParserLib

3- QRGen

4- qreader

5- QRCodeReaderView

6 barcodescanner

7- android-quick-response-code

8- MaterialBarcodeScanner

所以你可以使用任何一个。 享受你的代码时间:)