精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

警花观音坐莲激情销魂小说| 国产综合福利在线| 亚洲の无码国产の无码步美| 在线观看福利电影| 亚洲国产经典视频| 国产高清精品一区| 久久精品五月天| 羞羞色午夜精品一区二区三区| 精品国产一区二区三区忘忧草 | 在线日本中文字幕| 国产成人小视频| 欧美日韩在线电影| 久久久福利视频| 一级做a爱片性色毛片| 欧美日韩中文| 中文字幕亚洲欧美日韩2019| 久久精品无码专区| 国产成人毛片| 久久―日本道色综合久久| 国产日韩在线免费| 婷婷激情五月网| 国产成人精品亚洲线观看| 在线精品视频一区二区三四| 大荫蒂性生交片| 超碰免费97在线观看| 99精品视频在线免费观看| 亚洲一区二区三区777| 人人妻人人爽人人澡人人精品| 黑丝一区二区| 欧美成人亚洲成人日韩成人| 中文字幕有码在线播放| 白浆在线视频| 日韩毛片一二三区| 天堂社区 天堂综合网 天堂资源最新版| 一区二区三区视频免费看| 国产精品久久久久无码av| 亚洲图片在线综合| 30一40一50老女人毛片| 国产成人精品亚洲线观看| 日韩亚洲国产中文字幕欧美| 九九热精品国产| 欧美成a人片免费观看久久五月天| 欧美日韩一区二区三区| 男人日女人下面视频| 91在线超碰| 国产人妖乱国产精品人妖| 国产一区免费在线| 人妻与黑人一区二区三区| 国产suv精品一区二区883| 亚洲综合小说区| 国产人妻精品一区二区三区| 激情综合色丁香一区二区| 国产日韩欧美自拍| 国产精品污视频| 国产伦精品一区二区三区免费| 国产主播在线一区| 99视频在线观看免费| 亚洲精品字幕| 国外视频精品毛片| 精品成人免费视频| 蜜桃av综合| 超碰91人人草人人干| 日本二区三区视频| 亚洲综合自拍| 亚洲欧美中文字幕| 实拍女处破www免费看| 精品国产a一区二区三区v免费| 国产一区二区激情| 一级免费黄色录像| 欧美黄色一区| 久久久久久亚洲精品不卡| 五月婷婷中文字幕| 91九色精品国产一区二区| 久久久精品欧美| 法国空姐电影在线观看| 精品国产不卡| 久久国产精品电影| 日韩黄色a级片| 久久中文字幕一区二区三区| 国产日韩av在线| 亚洲精品久久久狠狠狠爱 | а√资源新版在线天堂| 亚洲综合久久久| 国产主播在线看| 在线激情网站| 一区二区三区不卡视频| 波多野结衣家庭教师在线| 日韩成人亚洲| 日韩精品一区二区三区视频 | 韩国19禁主播vip福利视频| 亚洲日本视频在线观看| 加勒比av一区二区| 久久国产精品一区二区三区四区| yourporn在线观看中文站| 一区二区三区av电影| 狠狠热免费视频| 高清毛片在线观看| 欧美亚洲综合色| 北条麻妃在线视频观看| 欧美亚洲二区| 国产丝袜高跟一区| 日本少妇高清视频| 久久久噜噜噜| 国产精品免费在线播放| 成年人视频在线观看免费| 亚洲成精国产精品女| 久久黄色片网站| 首页亚洲中字| 欧美大片第1页| 中文字幕一区二区三区人妻四季| av激情亚洲男人天堂| gogogo免费高清日本写真| 国产精品专区免费| 精品国产乱码91久久久久久网站| 日本在线观看网址| 美女国产一区| 国产日韩二区| av片在线观看免费| 欧美三级三级三级爽爽爽| xfplay5566色资源网站| 亚洲成av人片乱码色午夜| 国产精品成人免费电影| 亚洲 国产 欧美 日韩| 洋洋成人永久网站入口| 亚洲欧洲日本精品| 国产亚洲欧美日韩在线观看一区二区 | 亚洲视频在线二区| 日韩av大片站长工具| 亚洲国产中文字幕在线观看| 久久综合激情网| 国产一二三精品| 影音先锋欧美在线| 欧美xxxx性| 日韩视频在线免费| 一区二区视频免费| 国产精品三级在线观看| 婷婷久久青草热一区二区 | 91精品一区国产高清在线gif| 国产成人在线视频| 免费在线黄色电影| 欧美日韩亚洲一区二区| 成年人的黄色片| 亚洲毛片网站| 精品国产综合区久久久久久| gogo高清午夜人体在线| 日韩精品一区二区三区在线播放| 久久成人在线观看| 成人精品免费网站| www精品久久| 久久综合社区| 欧美一区二区三区图| 久久精品国产亚洲a∨麻豆| 欧美性xxxxhd| 性欧美精品中出| 蜜桃91丨九色丨蝌蚪91桃色| 一区二区免费在线观看| 99精品女人在线观看免费视频 | 欧美va在线观看| 中文字幕日韩在线播放| 91在线你懂的| 一区二区三区在线视频免费观看 | 夜夜爽8888| 亚洲三级免费电影| 性高潮免费视频| 国产精品综合| 亚洲国产精品一区二区第一页| 免费一级欧美在线观看视频| 久久综合电影一区| 黄色a在线观看| 亚洲国产精品成人综合| 夜夜夜夜夜夜操| 国产精品多人| 免费国产一区二区| 在线欧美激情| 97国产在线视频| av男人的天堂在线| 欧美va亚洲va| 天天综合久久综合| 亚洲女厕所小便bbb| www.日本高清| 美腿丝袜亚洲一区| 日本手机在线视频| 精品精品99| 成人av资源网| 日韩经典一区| 欧美交受高潮1| 成人h小游戏| 精品成人佐山爱一区二区| 无码人妻黑人中文字幕| 亚洲精品久久久蜜桃| 我和岳m愉情xxxⅹ视频| 国产又粗又猛又爽又黄91精品| 亚洲 自拍 另类小说综合图区| heyzo久久| 国产呦系列欧美呦日韩呦| 欧美aaaaaaaa| 欧美在线性爱视频| 手机av在线播放| 在线视频中文亚洲| 特黄aaaaaaaaa真人毛片| 欧美视频一区二区三区在线观看| 久草免费新视频| 国产精品久久久久一区二区三区共| 国产亚洲精品成人a| 美女一区二区三区在线观看| 欧美爱爱视频免费看| 性欧美欧美巨大69| 日韩中文字幕av在线| 美女av一区| 91久久伊人青青碰碰婷婷| 国产视频一区二区| 国产亚洲精品91在线| 秋霞欧美在线观看| 欧美一区二区精品在线| 这里只有精品免费视频| 天天色综合成人网| 欧美日韩在线视频免费播放| 中文字幕国产一区二区| 右手影院亚洲欧美| 成av人片一区二区| 性生活在线视频| 九九精品视频在线看| 国产视频一区二区视频| 久久精品国产68国产精品亚洲| 国产精品欧美日韩久久| 性欧美又大又长又硬| 欧美激情在线有限公司| 成人福利在线观看视频| 日日噜噜噜夜夜爽亚洲精品 | 国产精品久久久久桃色tv| 中文字幕xxx| 成人蜜臀av电影| 中文字幕在线观看91| 国产成人欧美日韩在线电影| 日本在线观看视频一区| 久久精品国内一区二区三区| 国产高潮免费视频| 免费亚洲电影在线| 艹b视频在线观看| 免费视频一区二区| 国产精品久久a| 美女网站视频久久| 依人在线免费视频| 经典一区二区三区| 能看毛片的网站| 国产福利视频一区二区三区| 古装做爰无遮挡三级聊斋艳谭| 激情亚洲综合在线| 亚洲五月激情网| 国产成人av一区| 国产精品成人无码专区| 91影院在线观看| 女人又爽又黄免费女仆| 久久精品一区四区| 丰满的亚洲女人毛茸茸| 国产精品女主播在线观看| 任你操精品视频| 一区二区三区欧美在线观看| 国产一级视频在线播放| 亚洲国产成人va在线观看天堂| 91香蕉在线视频| 色综合久久精品| 一起草av在线| 日韩女优视频免费观看| 香蕉视频免费在线看| 亚洲欧洲日产国码av系列天堂| 成年人在线视频免费观看| 久久影视电视剧免费网站| 日本在线视频中文有码| 91av在线播放视频| 国产亚洲精品精品国产亚洲综合| 91欧美激情另类亚洲| 国内精品免费| 日韩欧美亚洲日产国产| 亚洲女同一区| 久久精品视频16| 久久国产综合精品| 亚洲色偷偷色噜噜狠狠99网 | 亚洲精品美女免费| 国产精品一区在线看| 久久久久999| 久草免费在线视频| 国产在线视频91| 久久综合五月婷婷| 日本三级福利片| 日韩一区二区免费看| 三上悠亚在线一区| 9人人澡人人爽人人精品| 人妻互换一区二区激情偷拍| 亚洲电影一区二区三区| 中文字幕视频一区二区| 欧美mv日韩mv亚洲| 18免费在线视频| 97高清免费视频| 四虎国产精品免费久久| 精品综合久久| 91精品一区二区三区综合在线爱| 人妻有码中文字幕| 国产传媒久久文化传媒| 人妻少妇一区二区| 亚洲激情图片小说视频| 一级久久久久久| 亚洲国产中文字幕久久网| av在线官网| 国产精品看片资源| 国产精品对白| 免费看日b视频| 蜜桃久久久久久久| 亚洲一级中文字幕| 亚洲一区二区五区| 97人妻精品一区二区三区软件| 日韩精品在线视频| 欧美性受ⅹ╳╳╳黑人a性爽| 国产精品欧美日韩| 久久99国产成人小视频| 青青草成人免费在线视频| 狠狠色丁香婷综合久久| 一二三四在线观看视频| 日本乱码高清不卡字幕| 亚洲三区在线观看无套内射| 欧美精品情趣视频| 婷婷精品久久久久久久久久不卡| 日产国产精品精品a∨| 亚洲精品日本| 麻豆精品国产传媒av| 一区二区免费看| 国产草草影院ccyycom| 最近中文字幕日韩精品| 韩国精品主播一区二区在线观看| 九色91在线视频| 一区二区日本视频| 91精品啪在线观看国产| 亚洲国产视频在线| www.爱爱.com| 精品久久久久久久久久久久久久久久久 | 91高清在线免费观看| aaa国产精品视频| 国产综合18久久久久久| 国产精品videosex极品| 手机av在线网站| 亚洲免费资源在线播放| av网站在线免费看| 久久成人免费视频| 日韩视频在线直播| 免费在线黄网站| 北岛玲一区二区三区四区| 国产视频91在线| 日韩激情av在线播放| 中文字幕在线看片| 欧美综合77777色婷婷| 青娱乐精品视频在线| 永久免费看片直接| 日韩欧美视频一区| av老司机免费在线| 欧美激情第六页| 麻豆成人91精品二区三区| 国产精品99久久久久久成人| 日韩欧美电影一区| 精品众筹模特私拍视频| 国内精品久久国产| 久久综合狠狠| 日本福利片在线观看| 亚洲国产日韩欧美综合久久| 外国成人直播| 制服诱惑一区| 不卡一二三区首页| 国产女主播喷水视频在线观看| 日韩在线www| 北条麻妃一区二区三区在线| 免费无码av片在线观看| 中文字幕第一区| www.久久色| 日韩av电影中文字幕| 亚洲91视频| 中文字幕xxx| 欧美一级欧美一级在线播放| 国产高清中文字幕在线| 欧美一区二区三区精美影视| 激情五月婷婷综合| 你懂的国产在线| 久久久精品999| 亚洲激情77| 毛片毛片毛片毛片毛| 欧美香蕉大胸在线视频观看| 欧美日韩欧美| 国产欧美在线一区二区| 美女脱光内衣内裤视频久久网站 | 日本中文字幕在线观看| 国产精品推荐精品| 美女性感视频久久| 久久久免费高清视频| 欧美老女人xx| 欧美一级本道电影免费专区| 国产大学生视频| 欧美精品乱人伦久久久久久| 天堂电影一区| 日韩欧美视频免费在线观看| 国产欧美久久久精品影院| 丰满人妻一区二区三区四区53| 国产精品一区二区在线|