二维码和条形码扫描在如今的移动应用中被广泛使用,无论是商业应用还是个人应用,它们都能为用户提供便利。在安卓开发中,ZXing是一个功能强大而又易于使用的库,可以帮助我们实现二维码和条形码的扫描功能。本文将介绍如何使用ZXing库进行二维码和条形码的扫描。
1. 引入ZXing库
首先,在你的Android Studio项目中,找到build.gradle(Module: app)文件,然后在dependencies块中添加以下代码:
implementation 'com.google.zxing:core:3.4.1'
implementation 'com.journeyapps:zxing-android-embedded:4.0.0'
这将会引入ZXing库以及用于在Android应用中嵌入ZXing库的依赖。
2. 创建扫描活动
创建一个新的活动用于扫描二维码和条形码,例如命名为ScanActivity.java。
在该活动中,你需要添加一个SurfaceView用于相机预览,并且初始化ZXing扫描器。同时,还要添加一个用于显示扫描结果的TextView。
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import com.journeyapps.barcodescanner.BarcodeCallback;
import com.journeyapps.barcodescanner.BarcodeResult;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
import com.journeyapps.barcodescanner.DefaultDecoderFactory;
import java.util.Arrays;
import java.util.Collection;
public class ScanActivity extends AppCompatActivity {
private static final int CAMERA_PERMISSION_REQUEST_CODE = 200;
private static final int CAMERA_REQUEST_CODE = 201;
private DecoratedBarcodeView barcodeView;
private TextView resultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan);
barcodeView = findViewById(R.id.barcode_view);
resultTextView = findViewById(R.id.result_text_view);
// 初始化ZXing扫描器
Collection<BarcodeFormat> formats = Arrays.asList(BarcodeFormat.QR_CODE, BarcodeFormat.CODE_128);
barcodeView.getBarcodeView().setDecoderFactory(new DefaultDecoderFactory(formats));
// 请求相机权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
CAMERA_PERMISSION_REQUEST_CODE);
} else {
startCamera();
}
}
private void startCamera() {
barcodeView.resume();
barcodeView.decodeSingle(new BarcodeCallback() {
@Override
public void barcodeResult(BarcodeResult result) {
barcodeView.pause();
String barcode = result.getText();
resultTextView.setText(barcode);
}
@Override
public void possibleResultPoints(List<ResultPoint> resultPoints) {}
});
}
@Override
protected void onResume() {
super.onResume();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
startCamera();
}
}
@Override
protected void onPause() {
super.onPause();
barcodeView.pause();
}
@Override
protected void onDestroy() {
super.onDestroy();
barcodeView.pause();
barcodeView.shutdown();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startCamera();
}
}
}
}
3. 创建布局文件
在res/layout目录下创建一个名为activity_scan.xml的布局文件,用于定义扫描活动的UI。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ScanActivity">
<com.journeyapps.barcodescanner.DecoratedBarcodeView
android:id="@+id/barcode_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/result_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="24sp"
android:textColor="#000000" />
</RelativeLayout>
这个布局文件中包含一个用于相机预览的DecoratedBarcodeView和一个用于显示扫描结果的TextView。
4. 配置Manifest文件
在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.CAMERA" />
同时,在<application>标签内添加ScanActivity活动的声明:
<activity android:name=".ScanActivity" />
5. 运行
至此,你已经完成了使用ZXing进行二维码和条形码扫描的代码编写。现在,运行你的应用程序,并通过扫描二维码或条形码测试你的扫描功能。
结论
本文介绍了如何使用ZXing库进行安卓开发中的二维码和条形码扫描。通过ZXing,你可以轻松实现扫描功能,并将扫描结果用于其他业务逻辑。因其强大而易于使用,ZXing已成为许多开发者首选的扫描库。希望本文对你有所帮助,谢谢阅读!

评论 (0)