Android 二维码 生成和识别
2025-09-15 23:30
Android开发
173
0
0
0
标题录入
封面图
在 Android 开发中,**生成和识别二维码**是常见的功能。以下是一个完整的指南,包括使用 **ZXing(Zebra Crossing)** 库来实现这两个功能。 --- ## ✅ 一、生成二维码 ### 1. 添加依赖 在 `build.gradle` 文件中添加 ZXing 的依赖: ```gradle dependencies { implementation 'com.journeyapps:barcodescanner:4.1.0' } ``` > 注意:如果你只需要生成二维码而不需要扫描,可以使用 `android.graphics` 中的 `QRCode` 类,但更推荐使用 ZXing 库。 --- ### 2. 生成二维码的方法 ```java import android.graphics.Bitmap; import android.graphics.Color; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; public class QRCodeGenerator { public static Bitmap generateQRCode(String data, int width, int height) { try { BitMatrix bitMatrix = new MultiFormatWriter().encode( data, BarcodeFormat.QR_CODE, width, height ); return convertBitMatrixToBitmap(bitMatrix); } catch (WriterException e) { e.printStackTrace(); return null; } } private static Bitmap convertBitMatrixToBitmap(BitMatrix matrix) { int width = matrix.getWidth(); int height = matrix.getHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { bitmap.setPixel(x, y, matrix.get(x, y) ? Color.BLACK : Color.WHITE); } } return bitmap; } } ``` ### 3. 使用示例 ```java Bitmap qrBitmap = QRCodeGenerator.generateQRCode("https://www.example.com", 500, 500); imageView.setImageBitmap(qrBitmap); ``` --- ## ✅ 二、识别二维码 ### 1. 添加权限(AndroidManifest.xml) ```xml <uses-permission android:name="android.permission.CAMERA" /> ``` --- ### 2. 添加依赖(如未添加) ```gradle implementation 'com.journeyapps:barcodescanner:4.1.0' ``` --- ### 3. 实现扫码功能 #### 在 Activity 中启动扫码界面: ```java IntentIntegrator intentIntegrator = new IntentIntegrator(this); intentIntegrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE); intentIntegrator.setPrompt("Scan a QR Code"); intentIntegrator.setCameraId(0); // 0 or 1 intentIntegrator.setBeepEnabled(false); intentIntegrator.setOrientationLocked(true); intentIntegrator.initiateScan(); ``` --- ### 4. 处理扫描结果 ```java @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, "Cancelled", Toast.LENGTH_LONG).show(); } else { String scannedText = result.getContents(); Toast.makeText(this, "Scanned: " + scannedText, Toast.LENGTH_LONG).show(); } } else { Toast.makeText(this, "No result", Toast.LENGTH_LONG).show(); } } ``` --- ## ✅ 三、完整项目结构建议 - `MainActivity.java` 或 `MainActivity.kt` - `QRCodeGenerator.java`(生成二维码) - `activity_main.xml`(布局文件,包含一个 `ImageView` 和一个按钮) --- ## ✅ 四、注意事项 - 如果你使用的是 **Jetpack Compose**,也可以使用 `CameraX` + `ML Kit` 来实现扫码功能。 - ZXing 是开源库,支持多种格式(QR Code、EAN、UPC 等)。 - 可以自定义二维码样式(颜色、Logo、边框等)。 --- ## ✅ 五、推荐学习资源 - [ZXing GitHub](https://github.com/zxing/zxing) - [Android官方文档 - Camera](https://developer.android.com/training/camera) - [BarCodeScanner GitHub](https://github.com/danikula/AndroidBarcodeScanner) --- 如果你需要我提供 **Kotlin 版本的代码**,或者想用 **ML Kit** 来做二维码识别,也可以告诉我!
上一篇:
Android 使用DownloadManager进行版本更新的完整方案
下一篇:
Android Studio 快捷键整理分享
标题录入,一次不能超过6条
灵感和创意的闪现
T:0.011156s,M:131.66 KB
返回顶部
留言
留言
评论