Android中如何识别和解析二维码

601 阅读2分钟

app开发的常用场景之一,就是二维码的识别和解析,比如识别个人二维码,商品码,网页链接等等。 在 Android 中解析二维码内容,可以使用第三方库,如 ZXingZBar,其中 ZXing 是最常用的二维码解析库。以下是使用 ZXing 解析二维码示例的基本步骤:

1. 在 build.gradle 文件中添加依赖

首先,确保在你的项目的 build.gradle 文件中加入 ZXing 的依赖:

dependencies {
    implementation 'com.google.zxing:core:3.4.1'
    implementation 'com.journeyapps:zxing-android-embedded:4.3.0' // 方便嵌入相机功能
}

2. 配置权限

AndroidManifest.xml 中添加相机权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

3. 使用 ZXing 解码二维码

你可以通过在 Activity 中使用 IntentIntegrator 来启动二维码扫描,或直接在代码中处理二维码图像。以下是用 IntentIntegrator 启动扫描并解析二维码的示例:

import com.journeyapps.barcodescanner.BarcodeEncoder;
import com.journeyapps.barcodescanner.CaptureActivity;
import com.journeyapps.barcodescanner.IntentIntegrator;
import com.journeyapps.barcodescanner.IntentResult;

public class MainActivity extends AppCompatActivity {

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

        // 创建扫描器
        IntentIntegrator integrator = new IntentIntegrator(this);
        integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES); // 只扫描二维码
        integrator.setPrompt("扫描二维码"); // 显示扫描提示
        integrator.setCameraId(0);  // 默认后置摄像头
        integrator.setBeepEnabled(true); // 启用声音
        integrator.setBarcodeImageEnabled(true); // 启用扫描图片保存
        integrator.initiateScan();  // 启动扫描
    }

    // 接收扫描结果
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (result != null) {
            if (result.getContents() == null) {
                // 用户取消了扫描
                Toast.makeText(this, "扫描取消", Toast.LENGTH_LONG).show();
            } else {
                // 显示二维码内容
                Toast.makeText(this, "扫描结果: " + result.getContents(), Toast.LENGTH_LONG).show();
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}

4. 显示扫描结果

当扫描完成后,你可以在 onActivityResult() 方法中获取二维码的内容。扫描结果会通过 result.getContents() 返回,你可以将其显示在界面上或进一步处理。

5. 手动解析二维码图片

如果你想手动解析二维码图片,可以使用 QRCodeReader

QRCodeReader reader = new QRCodeReader();
try {
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.qr_code_image);
    BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BitmapLuminanceSource(bitmap)));
    Result result = reader.decode(binaryBitmap);
    String content = result.getText();
    Log.d("QRCode", "QR code content: " + content);
} catch (NotFoundException | ChecksumException | FormatException e) {
    e.printStackTrace();
}

这样就可以解析二维码图像并提取内容了。

结论

通过使用 ZXing 库,你可以方便地在 Android 应用中实现二维码扫描和解析功能。你可以选择启动扫描界面或者直接解析图片。