本文介绍在 android 应用中使用 ml kit 或 zxing 等扫码库完成扫描后,如何通过 intent 启动新 activity,并安全传递扫描结果,避免空指针与上下文失效问题。
在 Android 开发中,扫码(如 QR Code)通常借助 ActivityResultLauncher 配合 ScanContract(常见于 ZXing Android Embedded 或自定义封装)实现异步扫描回调。你当前的代码已成功捕获扫描结果并弹出 AlertDialog,下一步只需将该回调逻辑替换为标准的 Activity 跳转流程。
ActivityResultLauncherbarLauncher = registerForActivityResult( new ScanContract(), result -> { if (result != null && result.getContents() != null) { // 创建 Intent,启动目标 Activity Intent intent = new Intent(QRScanActivity.this, NextTargetActivity.class); // 可选:将扫描内容作为参数传递 intent.putExtra("scanned_data", result.getContents()); // 使用显式 Intent 启动(确保目标 Activity 已在 AndroidManifest.xml 中声明) startActivity(intent); // 可选:关闭当前扫码页(防止用户返回重复扫描) finish(); } else { // 处理空结果(如用户取消扫描、光线不足识别失败等) Toast.makeText(QRScanActivity.this, "No valid code scanned", Toast.LENGTH_SHORT).show(); } } );
实例:确保 barLauncher 在 Activity 的 onCreate() 或生命周期早期初始化,避免在 Fragment 或已销毁 Activity 中调用。如需在跳转时携带更多上下文(如扫描时间、原始图像缩略图或格式类型),可扩展 Intent 参数:
intent.putExtra("scanned_format", result.getFormatName()); // 如 "QR_CODE"
intent.putExtra("scan_timestamp", System.currentTimeMillis());最终,一次成功的扫码不应仅止于展示结果——合理利用扫描数据驱动页面流转,是构建流畅用户体验的关键一步。