将 Zxing 库与 Jetpack compose 结合使用

2023-11-22

我正在尝试使用 zxing 库实现 qr 扫描仪。为此,我在屏幕上添加了一个按钮,单击它后,我将启动扫描仪,如下所示

Button(
        onClick = {
            val intentIntegrator = IntentIntegrator(context)
            intentIntegrator.setPrompt(QrScanLabel)
            intentIntegrator.setOrientationLocked(true)
            intentIntegrator.initiateScan()
        },
        modifier = Modifier
            .fillMaxWidth()
    ) {
        Text(
            text = QrScanLabel
        )
    }

但是,它发起了一个意图,期望onActivityResult方法返回结果。 Jetpack compose 使用rememberLauncherForActivityResult像下面这样

val intentLauncher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.StartIntentSenderForResult()
    ) {
        if (it.resultCode != RESULT_OK) {
            return@rememberLauncherForActivityResult
        }
        ...
    }

但我们如何在这里将两者整合在一起呢?


我用相同的库做了一个临时解决方案: 梯度依赖:

implementation('com.journeyapps:zxing-android-embedded:4.1.0') { transitive = false }
implementation 'com.google.zxing:core:3.4.0'

我的新屏幕带有喷气背包构图和相机捕捉功能,适用于我的应用程序:

@Composable
fun AdminClubMembershipScanScreen(navController: NavHostController) {
    val context = LocalContext.current
    var scanFlag by remember {
        mutableStateOf(false)
    }

    val compoundBarcodeView = remember {
        CompoundBarcodeView(context).apply {
            val capture = CaptureManager(context as Activity, this)
            capture.initializeFromIntent(context.intent, null)
            this.setStatusText("")
            capture.decode()
            this.decodeContinuous { result ->
                if(scanFlag){
                    return@decodeContinuous
                }
                scanFlag = true
                result.text?.let { barCodeOrQr->
                    //Do something and when you finish this something
                    //put scanFlag = false to scan another item
                    scanFlag = false
                }
                //If you don't put this scanFlag = false, it will never work again.
                //you can put a delay over 2 seconds and then scanFlag = false to prevent multiple scanning 
                
            }
        }
    }

    AndroidView(
        modifier = Modifier,
        factory = { compoundBarcodeView },
    )
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Zxing 库与 Jetpack compose 结合使用 的相关文章

随机推荐

  • Oracle Install for SSIS 连接(和驱动程序 32 64 位)

    我有一个 SSIS 包 SQL 2008 需要使用它连接到 Oracle DB 11g 我需要安装什么才能连接到 oracle 术语是什么 我所做的所有搜索都谈到了 Instant Client 但是在下载时我没有看到任何 exe 文件 我
  • OpenGL 在 IOS 12 中已弃用,如何在 ios 12+ 设备上安全地继续使用 openGL?

    苹果表示 使用 OpenGL ES 构建的应用程序将继续在 iOS 12 中运行 但 iOS 12 中不推荐使用 Open GL ES 以前使用 OpenGL ES 的游戏和图形密集型应用程序现在应该采用 Metal 但我不想将我的应用程序
  • 如何判断我是否在 x64 上运行?

    我刚刚收到一份错误报告 该报告仅涉及程序 在 64 位计算机上 运行时才会出现的问题 现在 Delphi 不生成 64 位代码 因此理论上这应该不重要 但显然在这种情况下确实如此 我想我有一个解决方法 但它会破坏 32 位 Windows
  • addEventListener - 检测 div 元素的变化?

    我想检测 div 元素的变化 我已经尝试过某些类型的 addEventListener 例如 更改 加载 这是我的示例 但该事件不会触发 div Test Div Text div
  • 在 PhoneGap 应用程序中显示 Android 状态栏(即防止全屏)

    我有一个phonegap 3 0 0 应用程序 我的应用程序涵盖了状态栏 带有时钟 接收信息等的东西 由于我不是全屏游戏 所以这是不可取的 我相信它作为 全屏 应用程序运行 我在堆栈上找到了一些帖子来执行相反的操作 即使应用程序全屏显示 并
  • O(nk) 和 O(n+k) 的时间复杂度有什么区别?

    在算法分析中时间复杂度的大O表示法中 当算法依赖于n和k时 这两种表示法有什么区别 如果存在一个嵌套循环 其中外循环运行 n 次 内循环运行 k 次 请帮助使用符号 O nk for i 0 i
  • WCF 错误“对象图中可以序列化或反序列化的最大项目数为‘65536’”

    我在 WCF 调用中收到以下错误 一个实例中可以序列化或反序列化的最大项目数 对象图是 65536 我读过大量论坛帖子 其中许多提到修改 app config 和 web config 以指定新行为以允许更大的对象图 我已经做到了 这就是我
  • 中断()没有按预期工作(中断是如何工作的?)

    我想中断一个线程 但调用interrupt 似乎不起作用 下面是示例代码 public class BasicThreadrRunner public static void main String args Thread t1 new T
  • 如何使用 SFINAE 检测类的存在?

    是否可以使用 C 检测类是否存在SFINAE 如果可以的话怎么办 假设我们有一个仅由某些版本的库提供的类 我想知道是否可以使用 SFINAE 来检测该类是否存在 检测的结果是任意的 比如一个枚举常量 如果存在则为1 否则为0 如果我们要求编
  • 编辑器不包含主类型

    刚刚浏览了 Scala 网站上的示例 Scala 代码 但在尝试运行它时遇到了恼人的错误 这是代码 http www scala lang org node 45 在 Eclipse 上运行它时 我收到一条消息 编辑器不包含主类型 导致它无
  • hibernate如何生成外键约束名称?

    hibernate如何生成外键约束名称 如果我没有定义名称 休眠会生成类似这样的内容 CONSTRAINT fk 2ocepcfwpr1v18dg1ieoe6bau 这个名字是怎么生成的 也许来自MD5字段名称的哈希值或类似的东西 我需要知
  • Internet Explorer 8 中未定义 JSON 对象

    目前我正在编写一个 JavaScript 文件并包含以下行 var res JSON JSON stringify result 结果设置在这条线的正上方 我遇到的问题是 IE8 仅限 IE8 向我报告 JSON 未定义 我不知道该怎么理解
  • 使用 dart 创建 JavaScript 库

    问题 我目前正在开发一个 JavaScript 库 为了减少错误数量 我认为我的库可能会受益于使用 Dart 的静态类型机制 首先 因为我的库既不与 HTML 也不与其他 JavaScript 库进行任何互操作 只进行纯 JavaScrip
  • 自动完成弹出窗口时 Eclipse ADT 崩溃

    我正在使用 eclipse ADT bundle Google 让您可以直接从他们的网站下载 我使用的是 Ubuntu 13 10 并且使用的是 Oracle Java 7 我的问题是 一旦显示自动完成弹出窗口 Eclipse 就会崩溃 冻
  • 如何使用 msbuild 引导 .NET 3.5 SP1?按照找到的说明不起作用

    我正在尝试使用 msbuildGenerateBootstrapper 任务来分发带有框架的 net 应用程序 而不需要互联网连接来安装它 我发现很多帖子都指向相同的说明 为 NET Framework 3 5 SP1 引导程序启用 Sam
  • 在android中使用多点触控进行旋转和缩放

    我想在多点触摸事件上旋转和缩放图像 我能够拖动 缩放图像 但我无法理解图像的旋转 我面临问题 所以请尽快帮助我 我的代码在那里 public class Touch extends Activity implements OnTouchLi
  • 当 R 目录不为空时,如何重命名该目录?

    如何从 R 重命名目录 I tried Warning message In file rename from sprintf content s content pu name to sprintf content s cannot re
  • 使用boost::asio发送http GET请求,类似于cURL

    我正在尝试使用某个域的 REST API 发送 http GET 请求 基本上我想做的是替换以下卷曲请求 curl k H Content Type application json X GET data username u email
  • F# 代码发布版本中的 NOP

    我正在 VS2010 beta2 中使用 F 由于我是 F 新手 我只是选择了一个常见示例 然后继续实现了一个阶乘函数 如下所示 let rec factorial n if n lt 1 then 1 else n factorial n
  • 将 Zxing 库与 Jetpack compose 结合使用

    我正在尝试使用 zxing 库实现 qr 扫描仪 为此 我在屏幕上添加了一个按钮 单击它后 我将启动扫描仪 如下所示 Button onClick val intentIntegrator IntentIntegrator context