精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

炫酷!讓Android同時掃多個二維碼的魔法揭秘

移動開發 Android
超市里別人還在一個一個掃商品二維碼,你的APP卻能"唰"一下瞬間識別整排商品!今天教大家用Google的黑科技MLKit+CameraX,輕松實現這個超酷功能。別擔心,跟著做絕對能搞定!

想象一下:超市里別人還在一個一個掃商品二維碼,你的APP卻能"唰"一下瞬間識別整排商品!今天教大家用Google的黑科技MLKit+CameraX,輕松實現這個超酷功能。別擔心,跟著做絕對能搞定~

準備工作:裝備你的"魔法棒"

// build.gradle 添加這些"魔法材料"
dependencies {
    implementation 'androidx.camera:camera-camera2:1.3.1'       // 相機核心
    implementation 'androidx.camera:camera-lifecycle:1.3.1'      // 生命周期管家
    implementation 'androidx.camera:camera-view:1.3.1'  // 取景器
    implementation 'com.google.mlkit:barcode-scanning:17.1.0'   // 二維碼識別引擎
}
<!-- AndroidManifest.xml 申請相機權限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />

?? 就像哈利波特需要魔杖,這些就是我們的"魔法裝備"!記得先在手機設置里開啟相機權限哦~

搭建舞臺:創建掃描界面

<!-- activity_main.xml 布置舞臺 -->
<androidx.camera.view.PreviewView
    android:id="@+id/viewFinder"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

?? 這個全屏"魔法鏡"就是我們的掃描窗口,用戶看到的實時畫面都在這里顯示

核心魔法:二維碼識別器

class QRCodeAnalyzer(privateval onDetect: (List<Barcode>) -> Unit) : ImageAnalysis.Analyzer {

    // 設置只識別二維碼(避免誤認條形碼)
    privateval options = BarcodeScannerOptions.Builder()
        .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
        .build()

    privateval scanner = BarcodeScanning.getClient(options)  // 創建識別器實例

    @SuppressLint("UnsafeExperimentalUsageError")
    overridefun analyze(imageProxy: ImageProxy) {
        val mediaImage = imageProxy.image
        mediaImage?.let { 
            // 將相機畫面轉為可識別格式
            val image = InputImage.fromMediaImage(it, imageProxy.imageInfo.rotationDegrees)
            scanImage(image, imageProxy)  // 開始掃描!
        }
    }

    privatefun scanImage(image: InputImage, imageProxy: ImageProxy) {
        scanner.process(image)
            .addOnSuccessListener { codes -> 
                onDetect(codes)  // 成功抓到所有二維碼!
            }
            .addOnCompleteListener { 
                imageProxy.close()  // 關閉當前幀,準備下一幀
            }
    }
}

?? 這段代碼就像訓練了一只"二維碼獵犬":

analyze()負責轉換相機畫面格式

scanImage()釋放獵犬識別二維碼

? 識別完成后自動重置準備下次狩獵

啟動魔法:把一切組裝起來

class MainActivity : AppCompatActivity() {
    private val cameraExecutor = Executors.newSingleThreadExecutor()  // 專用工作線程
    private val viewFinder by lazy { findViewById<PreviewView>(R.id.viewFinder) }

    private fun startCamera() {
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)

        cameraProviderFuture.addListener({
            val cameraProvider = cameraProviderFuture.get()
            
            // 創建預覽畫面
            val preview = Preview.Builder().build().apply {
                setSurfaceProvider(viewFinder.surfaceProvider)
            }

            // 創建二維碼識別管道
            val qrAnalyzer = ImageAnalysis.Builder().build().apply {
                setAnalyzer(cameraExecutor, QRCodeAnalyzer { codes ->
                    // 識別結果回調區 ▼
                    codes.forEachIndexed { index, code ->
                        Log.d("QR_DEBUG", "抓到二維碼 ${index + 1}: ${code.rawValue}")
                    }
                })
            }

            try {
                // 組裝所有部件!啟動!
                cameraProvider.unbindAll()
                cameraProvider.bindToLifecycle(
                    this, 
                    CameraSelector.DEFAULT_BACK_CAMERA,  // 使用后置攝像頭
                    preview,
                    qrAnalyzer
                )
            } catch (e: Exception) {
                Log.e("CAMERA", "啟動失敗", e)
            }
        }, ContextCompat.getMainExecutor(this))
    }
}

啟動流程四步走:

? 獲取相機控制權

? 設置預覽窗口

? 連接二維碼識別器

? 啟動整個系統!

圖片圖片

圖片圖片


讓掃描結果躍然屏上

想要把掃描到的二維碼信息實時展示出來?小菜一碟!

<!-- 結果展示層 -->
<LinearLayout
    android:id="@+id/resultsContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:orientation="vertical"
    android:background="#80000000"
    android:padding="16dp">
        
    <TextView
        android:id="@+id/tvHeader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="掃描結果"
        android:textColor="#4CAF50"
        android:textSize="18sp"
        android:textStyle="bold"/>
        
    <LinearLayout
        android:id="@+id/resultsLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="8dp"/>
</LinearLayout>

設計思路:動態添加識別到的每個二維碼信息

在MainActivity中添加處理邏輯:

// 獲取布局元素引用
private val resultsLayout by lazy { findViewById<LinearLayout>(R.id.resultsLayout) }
private val resultsContainer by lazy { findViewById<LinearLayout>(R.id.resultsContainer) }
    
// 顯示掃描結果的核心方法
private fun showScanResults(codes: List<Barcode>) {
    // 清空之前的結果
    resultsLayout.removeAllViews()
        
    if (codes.isEmpty()) {
        // 沒有掃描到結果時顯示提示
        val emptyView = TextView(this).apply {
            text = "???♀? 正在尋找二維碼..."
            setTextColor(Color.WHITE)
        }
        resultsLayout.addView(emptyView)
        return
    }

    // 動態添加每個二維碼結果
    codes.forEachIndexed { index, barcode ->
        val resultView = createResultView(barcode, index)
        resultsLayout.addView(resultView)
    }
}

// 創建單個結果視圖
private fun createResultView(barcode: Barcode, index: Int): TextView {
    return TextView(this).apply {
        // 解析二維碼內容
        val content = barcode.rawValue ?: "未知內容"
            
        // 格式化顯示文本
        text = "? 二維碼 ${index + 1}:\n${content.take(50)}${if (content.length > 50) "..." else ""}"
        setTextColor(Color.WHITE)
        setTypeface(null, Typeface.BOLD)
        textSize = 14f
            
        // 添加點擊事件查看完整內容
        setOnClickListener {
            AlertDialog.Builder(this@MainActivity)
                .setTitle("二維碼詳情")
                .setMessage(content)
                .setPositiveButton("復制") { _, _ ->
                    copyToClipboard(content)
                    Toast.makeText(this@MainActivity, "已復制到剪貼板", Toast.LENGTH_SHORT).show()
                }
                .setNegativeButton("關閉", null)
                .show()
        }
    }
}
    
// 復制到剪貼板工具方法
private fun copyToClipboard(text: String) {
    val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
    val clip = ClipData.newPlainText("二維碼內容", text)
    clipboard.setPrimaryClip(clip)
}

圖片圖片

超實用小技巧

性能優化:在ImageAnalysis.Builder()后加上.setBackpressureStrategy(STRATEGY_KEEP_ONLY_LATEST)避免卡頓

多類型支持:修改.setBarcodeFormats()可同時識別條形碼/二維碼

聚焦區域:添加viewFinder.setOnTouchListener實現點擊聚焦

// 添加點擊聚焦功能
viewFinder.setOnTouchListener { _, event ->
    if (event.action == MotionEvent.ACTION_DOWN) {
        val factory = viewFinder.meteringPointFactory
        val point = factory.createPoint(event.x, event.y)
        CameraControl?.startFocusAndMetering(FocusMeteringAction.Builder(point).build())
    }
    true
}

CameraX搭舞臺,ML Kit來識別,異步處理不卡頓,多碼掃描So Easy!

現在你的APP已經擁有"火眼金睛"啦!快去試試同時掃描一排二維碼的爽快感吧~

源碼https://github.com/Reathin/Sample-Android/tree/master/module_mlkit_barcode_scanning

責任編輯:武曉燕 來源: 沐雨花飛碟
相關推薦

2023-12-25 14:53:36

2022-03-24 09:43:29

二維碼二維碼修改器github

2023-08-08 14:16:07

二維碼開發鴻蒙

2024-06-26 08:46:45

2013-12-03 10:32:52

2013-01-30 12:16:49

二維碼NFC近場通訊

2013-11-26 09:54:02

2024-03-07 07:59:37

2013-03-27 16:13:17

Android開發Android二維碼生QR生成

2018-03-05 18:39:25

2023-11-17 15:44:06

C++庫生成二維碼

2021-09-08 10:02:56

面試二維碼前端

2023-05-09 20:41:00

網絡詐騙網絡安全

2023-11-17 09:07:51

.NET生成二維碼識別二維碼

2012-04-01 09:53:13

二維碼

2017-02-21 09:17:46

二維碼漏洞

2011-12-06 16:40:45

二維碼快拍二維碼靈動快拍

2013-11-19 16:06:39

2011-11-24 16:00:23

信息圖QR碼二維碼

2013-01-30 12:12:20

微信二維碼智能手機
點贊
收藏

51CTO技術棧公眾號

日韩av综合在线观看| 国产不卡精品视男人的天堂| 无套内谢丰满少妇中文字幕| 黄污视频在线观看| 99国产欧美久久久精品| 国产精品高潮呻吟久久av无限 | 91网站在线观看视频| 国产精品9999| 九九在线观看视频| 狠狠综合久久av一区二区蜜桃| 欧美日韩一区三区| 精品国产一区二区三区无码| 黄色av网站在线| 国产成人精品三级麻豆| 青青草原成人在线视频| 色在线观看视频| 国产a久久精品一区二区三区| 欧美顶级少妇做爰| www黄色在线| 黄色美女视频在线观看| 国产精品久久毛片av大全日韩| 国产99视频精品免费视频36| 天堂免费在线视频| 99精品国产一区二区青青牛奶| 色av中文字幕一区| 国产美女视频免费观看下载软件| 成人一区视频| 欧美性xxxx极品hd欧美风情| 小泽玛利亚av在线| 三区四区电影在线观看| 久久日一线二线三线suv| 国产经品一区二区| a级片免费观看| 美女在线观看视频一区二区| 人人爽久久涩噜噜噜网站| 久热精品在线观看| 亚洲欧美一区在线| 久久久国产精品x99av| 黄色片网站免费| 中文字幕精品影院| 亚洲欧美日韩网| 极品粉嫩小仙女高潮喷水久久| 成人自拍视频| 91精品麻豆日日躁夜夜躁| 国产一二三四在线视频| 三上悠亚一区二区| 色婷婷久久综合| 日批视频在线免费看| 麻豆成全视频免费观看在线看| 一区二区三区中文免费| 99久久99久久精品| www红色一片_亚洲成a人片在线观看_| 国产精品乱子久久久久| 亚洲一区bb| 免费黄色在线| 亚洲男人的天堂一区二区| 青春草在线视频免费观看| 欧美96在线| 亚洲少妇30p| 300部国产真实乱| 亚洲丝袜一区| 亚洲一二三专区| 久色视频在线播放| 欧美黄色网页| 欧美日韩你懂得| 在线视频一二区| 清纯唯美激情亚洲| 精品福利一区二区三区免费视频| 日本在线不卡一区二区| 日韩动漫一区| 伊人伊人伊人久久| 午夜激情福利网| 亚洲私人影院| 日本欧美中文字幕| 中文字幕+乱码+中文| 精品一区二区三区在线观看| 亚洲综合最新在线| 亚洲aⅴ乱码精品成人区| 久久久九九九九| 制服国产精品| free性欧美| 91黄色免费版| 中文字幕在线观看视频www| 粉嫩久久久久久久极品| 亚洲欧美一区二区精品久久久| 高清国产在线观看| 午夜欧美理论片| 欧亚精品在线观看| 国产精品久久免费| av亚洲精华国产精华精| 亚洲精品美女久久7777777| 中中文字幕av在线| 欧美日韩一区二区三区在线免费观看| 奇米影音第四色| 91蝌蚪精品视频| 国产午夜精品免费一区二区三区 | 国产黄a三级三级三级av在线看| 一区二区三区国产| 大香煮伊手机一区| 亚洲1区在线| 在线播放国产精品| 国产精品theporn动漫| 日韩电影免费在线观看网站| 成人91视频| 2021av在线| 五月开心婷婷久久| 美女被艹视频网站| 欧洲杯足球赛直播| 91av视频在线| 97超视频在线观看| 久久综合九色综合97婷婷女人| 三年中国中文在线观看免费播放| 欧美男男tv网站在线播放| 欧美久久久久久蜜桃| 9.1成人看片免费版| 国产综合自拍| 成人欧美在线观看| 电影在线高清| 欧美性极品少妇精品网站| 中文写幕一区二区三区免费观成熟| 久久av网址| 孩xxxx性bbbb欧美| 国产高清视频免费观看| 国产精品水嫩水嫩| 男人亚洲天堂网| 国产一区二区三区亚洲| 九九热精品视频| 亚洲天堂中文网| 久久久精品国产免大香伊| 人妻少妇精品无码专区二区| 国产精品一站二站| 精品国产一区二区三区久久久| 无码人妻av免费一区二区三区 | 亚洲精品国产福利| 精品午夜福利视频| 国产一区不卡视频| 久久av喷吹av高潮av| 欧美韩国日本| 日韩在线免费高清视频| 伊人网综合在线| 国产精品伦理在线| 婷婷激情5月天| 99精品视频在线| 成人久久久久久| 日韩免费啪啪| 欧美肥妇毛茸茸| 二区三区四区视频| 国产剧情一区二区三区| 黄色污污在线观看| 欧美第一在线视频| 欧美第一黄色网| 人成网站在线观看| 欧美日韩国产在线| 精品人妻互换一区二区三区| 久久久国产精品一区二区中文| 国产精品亚洲综合| 麻豆网站免费在线观看| 国产午夜精品麻豆| 日韩中文字幕高清| 国产精品国产三级国产aⅴ无密码| 91极品视频在线观看| 日韩一区二区三区免费播放| 91免费欧美精品| 天堂va在线| 亚洲精品成人网| 国产99免费视频| 国产精品久久久久久久久免费相片| 性生生活大片免费看视频| 欧美aⅴ99久久黑人专区| 国产伦精品一区二区三区视频孕妇| 18aaaa精品欧美大片h| 亚洲免费av网址| 在线观看视频中文字幕| 亚洲精品成a人| 中国av免费看| 麻豆传媒一区二区三区| 久久亚洲a v| 免费久久久久久久久| 国产精品入口夜色视频大尺度| 国产在线高潮| 精品国产91乱码一区二区三区 | www.男人天堂网| 亚洲精品推荐| 成人淫片在线看| 狠狠躁少妇一区二区三区| 亚洲一二在线观看| 国产手机视频在线| 富二代精品短视频| 免费黄色国产视频| 本田岬高潮一区二区三区| 手机看片福利日韩| 狠狠爱成人网| 一本一道久久a久久精品综合| 伊色综合久久之综合久久| 日韩免费中文字幕| 在线视频中文字幕第一页| 亚洲欧美中文日韩在线v日本| 一本色道久久综合亚洲| 午夜精品久久久久久久久| 刘亦菲国产毛片bd| 99久久久精品免费观看国产蜜| 日韩av卡一卡二| 亚洲精品极品| 国产一区一区三区| 国产亚洲电影| 国模精品一区二区三区| 先锋影音一区二区| 日韩美女免费视频| 91九色在线播放| 久久综合伊人77777蜜臀| 激情在线视频| 亚洲精品国产精品久久清纯直播 | 91网站最新网址| 特黄特色免费视频| 麻豆久久久久久| 久久久久久久久久久久久国产精品| 欧美日韩四区| 日本特级黄色大片| 成人影院天天5g天天爽无毒影院| 国产精品一区二| 日本免费一区二区视频| 国产在线观看91精品一区| 欧美大片免费观看网址| 欧美亚洲在线播放| 波多野结衣在线高清| 久久亚洲精品成人| 91caoporn在线| 国产亚洲精品激情久久| 飘雪影院手机免费高清版在线观看| 日韩欧美一区二区在线视频| 91精品视频免费在线观看| 欧洲av一区二区嗯嗯嗯啊| 天天综合天天干| 精品国产乱码久久久久久虫虫漫画| 久久久全国免费视频| 亚洲九九爱视频| 四虎免费在线视频| 亚洲男人天堂av网| 免费麻豆国产一区二区三区四区| 国产精品激情偷乱一区二区∴| 俄罗斯毛片基地| 亚洲国产成人午夜在线一区| 少妇人妻好深好紧精品无码| 国产亚洲美州欧州综合国| 亚洲av无码一区二区三区人| 91美女在线视频| 国产精品高清无码在线观看| 久久五月婷婷丁香社区| 97超碰在线资源| 国产三级欧美三级| 日韩福利在线视频| 国产精品激情偷乱一区二区∴| 天天爽天天爽天天爽| 亚洲欧美日韩中文字幕一区二区三区| 小早川怜子一区二区的演员表| 亚洲视频在线一区二区| 成人免费毛片东京热| 亚洲一区二区在线免费看| 日本一级淫片免费放| 狠狠久久亚洲欧美专区| 欧美日韩a v| 欧美精选一区二区| 亚洲a视频在线观看| 亚洲精品www久久久| 国产在线视频你懂得| 日韩中文字幕av| av大大超碰在线| 久久久久五月天| 欧美电影免费观看网站| 成人精品一区二区三区电影免费 | 欧美日韩在线观看一区二区三区| 国产欧美日韩精品一区二区免费 | 妺妺窝人体色www聚色窝仙踪| 亚洲国产综合视频在线观看| 国产午夜在线播放| 欧美揉bbbbb揉bbbbb| 精品国产一级片| 精品视频在线播放| 日本中文在线| 久久久亚洲福利精品午夜| 激情开心成人网| 1卡2卡3卡精品视频| 九热爱视频精品视频| 小说区视频区图片区| 日韩午夜免费视频| 亚洲欧美国产中文| 波多野结衣中文一区| 丰满的亚洲女人毛茸茸| 亚洲精品水蜜桃| 中文字幕69页| 日韩精品一区二区三区三区免费| 艳母动漫在线看| 久久中文字幕在线视频| 久久uomeier| 91久久精品美女高潮| 伊人精品一区| 人妻互换免费中文字幕| 日韩主播视频在线| 国产综合内射日韩久| 国产精品久久久久四虎| 日韩熟女精品一区二区三区| 欧美日韩第一区日日骚| 性xxxxbbbb| 超碰97人人做人人爱少妇| 偷拍视频一区二区三区| 国产精品久久波多野结衣| 久久国产亚洲精品| av动漫在线观看| 国产91丝袜在线播放0| 亚洲色图100p| 日本乱码高清不卡字幕| 色一情一乱一区二区三区| 久久久91精品| 懂色aⅴ精品一区二区三区| 久久久99爱| 樱桃成人精品视频在线播放| 一级黄色在线播放| 日本一区二区三区视频视频| 免费观看一区二区三区毛片| 日韩一卡二卡三卡国产欧美| 中文字幕在线观看日本| 日韩av大片在线| 欧美天堂影院| 久久艹国产精品| 国产成人一区二区精品非洲| 疯狂撞击丝袜人妻| 欧美日韩精品三区| 精品电影在线| 欧美在线亚洲一区| 欧美一区二区三区久久| 久久久久久免费看| 高清国产一区二区| 九九九久久久久| 日韩欧美在线一区二区三区| 二区三区四区高清视频在线观看| 国产精品福利在线| 精品国产一区二区三区小蝌蚪| 国产无套内射久久久国产| 91在线视频观看| www.国产高清| 国产婷婷成人久久av免费高清 | 91日本在线视频| 国产精品久久久久一区二区三区厕所| 久久精品午夜福利| 久久久99精品久久| 欧美视频xxxx| 最新69国产成人精品视频免费| 成人mm视频在线观看| 天堂√在线观看一区二区| 秋霞午夜鲁丝一区二区老狼| www.日本高清视频| 欧美日韩一区在线观看| 免费大片在线观看www| 成人在线视频网| 午夜视频一区| 亚洲少妇18p| 欧美日韩中文字幕综合视频| 巨骚激情综合| 国产精品欧美风情| 久久久久久久久丰满| 欧美色图校园春色| 亚洲第一久久影院| 欧美日韩伦理片| 国产精品日韩欧美| 中文字幕一区二区三区乱码图片 | 三级网站免费观看| 日本欧美国产在线| 久久综合88| 蜜桃色一区二区三区| 精品久久久久久久久中文字幕 | 国产日韩精品久久久| 亚洲天堂中文在线| 欧美黑人极品猛少妇色xxxxx| 极品一区美女高清| www.99在线| 亚洲综合男人的天堂| 日本天堂影院在线视频| 国产精品中文字幕在线观看| 欧美搞黄网站| 久久精品国产亚洲av麻豆| 欧美欧美欧美欧美| 黄视频免费在线看| 亚洲精品一区二区三区樱花| 国产成人aaa| 日本黄色一级视频| 欧美另类高清videos| 最新精品国偷自产在线| 在线看免费毛片| 欧美日韩国产精品专区| 午夜看片在线免费| 极品校花啪啪激情久久| 美国三级日本三级久久99| 亚洲一区 视频| 日韩在线视频观看正片免费网站| 91综合久久爱com| 亚洲欧美国产日韩综合| 调教+趴+乳夹+国产+精品| 美女免费久久| 欧美高清性xxxxhd | 91麻豆精品国产91久久久久久久久 |