}

<application …>

CameraX的支持当然也要一并加上

// 版本号
def camerax_version = “1.0.0-rc03”
// 对camera 及 camera2的支持,可自行选择
implementation “androidx.camera:camera-core:cameraxversion"implementation"androidx.camera:camera−camera2:{camerax_version}" implementation "androidx.camera:camera-camera2:cameraxv​ersion"implementation"androidx.camera:camera−camera2:{camerax_version}”

项目使用的是基于jetpack lifecycle的框架,所以加上lifecycle的支持

implementation “androidx.camera:camera-lifecycle:${camerax_version}”

预览用到了camerax自带的预览控件

implementation “androidx.camera:camera-view:1.0.0-alpha22”

接下来就是具体的代码实现了 首先,用到了相机及相册,自然需要添加相应的权限申请

ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE),REQUEST_PERMISSION)

先来看看扫码界面的实现,主要包含了预览的PreviewView及用于绘制扫码线条及扫码结果的ScanOverlay

<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width=“match_parent”
android:layout_height=“match_parent”
/>
<com.hsmedia.mlkitdemo.ScanOverlay
android:id="@+id/overlay"
android:layout_width=“match_parent”
android:layout_height=“0dp”
app:layout_constraintTop_toBottomOf="@id/iv_exit"
app:layout_constraintBottom_toTopOf="@id/tv_tips"
android:layout_marginBottom=“20dp”
android:layout_marginTop=“20dp”
/>

接下来看一下如何开启CameraX的预览

CameraX自带了检测相机是否可用的监听,可以在相机可用之后,再进行后续操作

cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()
bindScan(cameraProvider, overlay.width,overlay.height)
}, ContextCompat.getMainExecutor(this@BarcodeScanningActivity))

并且,CameraX绑定生命周期控件后,可以根据生命周期,自行释放相机,妈妈再也不用担心忘记关相机啦

val preview : Preview = Preview.Builder().build()

//绑定预览
preview.setSurfaceProvider(previewView.surfaceProvider)

//使用后置相机
val cameraSelector : CameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
//将相机绑定到当前控件的生命周期
camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, imageAnalysis, preview)

这样,就可以开启预览啦,可以注意到,代码中绑定到生命周期的时候,使用了一个imageAnalysis的useCases,而这,就是用于图片扫描的组件了

//配置图片扫描
val imageAnalysis = ImageAnalysis.Builder()
.setTargetResolution(Size(width, height))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()

光这样还不行,还需要为图片扫描配置解析扫码内容的解析器QRCodeAnalyser,说了这么多,终于要用到MLKit的二维码解析了 来看一下QRCodeAnalyser的具体实现

@SuppressLint(“UnsafeExperimentalUsageError”)
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image ?: kotlin.run {
imageProxy.close()
return
}
val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
detector.process(image)
.addOnSuccessListener { barCodes ->
if (barCodes.size > 0){
listener.invoke(barCodes[0],imag
eProxy.width,imageProxy.height)
//接收到结果后,就关闭解析
detector.close()
}
}
.addOnFailureListener { Log.d(TAG, “Error: ${it.message}”) }
.addOnCompleteListener { imageProxy.close() }

}

这个类主要实现了ImageAnalysis.Analyzer,并实现了analyze解析方法,其中imageProxy就是CameraX传递过来的图片扫描内容了 其主要内容,就是根据传递过来的图片扫描内容,使用detector进行解析,而这个detector又是怎么来的呢

//配置当前扫码格式
private val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(
Barcode.FORMAT_QR_CODE,
Barcode.FORMAT_AZTEC
)
.build()
//获取解析器
private val detector = BarcodeScanning.getClient(options)

这里的BarcodeScanning就是MLKit提供的二维码解析组件了
ORMAT_AZTEC
)
.build()
//获取解析器
private val detector = BarcodeScanning.getClient(options)

这里的BarcodeScanning就是MLKit提供的二维码解析组件了

仿微信二维码极速扫描(MLKit及CameraX初体验),安卓消息分发机制相关推荐

  1. 仿微信二维码极速扫描(MLKit及CameraX初体验),面试宝典

    可以看到,这个项目除了扫码功能,还有其他各种各样的好用且免费的SDK,像是文字识别,人脸识别等等,都可以依赖这个项目轻松搞定.无奈小弟才疏学浅,只接触了该项目的扫码功能,等来日水平提升了,定将其他的功 ...

  2. 基于zxing的仿微信二维码扫描界面

    基于zxing的仿微信二维码扫描界面 https://github.com/iamlocky/ZxingLite 本项目fork自yangxixi88/ZxingLite,在原项目基础上添加了本地图片 ...

  3. Android 基于google Zxing实现二维码 条形码扫描,仿微信二维码扫描效果

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转载请注 ...

  4. Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新 ...

  5. 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新 ...

  6. 微信二维码没有扫描id

    这个问题到不深,主要是想在这里记录下,加深自己印象. 在请求二维码时候四个参数.但是后面后面两个参数是一对一对的.也就是说 scene_str 和QR_STR_SCENE 是一对 scene_id 和 ...

  7. android微信二维码收款hook,【第一篇】【安卓微信】HOOK微信发消息,当HOOK遇上HOOK。...

    前人栽树,后人吃桃. 准备入坑 安卓 xposed hook 微信(及时通信),好吧,第一步当然是论坛里面搜索啦,像掷骰子.计步器什么的都是小孩子过家家入门级别的,当然是要搞就搞(及时通信).微信 a ...

  8. [android源码下载索引贴】微信+二维码那都不是事......

    微信: Android 简单仿微信朋友圈布局2014/09/02 http://www.eoeandroid.com/thread-542738-1-1.html [代码片段] 高仿摇一摇效果 201 ...

  9. Android 基于google Zxing实现对手机中的二维码进行扫描

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/14450809 我之前写了一篇关于google Zxing扫描二维码的文章,效果是仿微信 ...

最新文章

  1. 等了这么久,就给我看这个?
  2. LinkedList 实现原理及源码解析(jdk8 底层⽤的是链表)
  3. 【华为云技术分享】Linux内核的分布式编译(2)
  4. leetcode第26题:删除排序数组的重复项
  5. 二维数组,字符串,字符数组
  6. 三级分类用sql语句怎么写(多级分类的写法)
  7. 基于jQuery的视频和音频播放器jPlayer
  8. 【学习笔记】数据分析师相关岗位招聘情况分析
  9. 使用Intel NCS算力棒 安装部署记录 VirtualBox With Ubuntu16.04 Source Aliyun
  10. 【转】美国百所大学招生网专页~
  11. Blender - Proportional Edit Mode - 按比例编辑模式(3D版的液化、挤压工具)
  12. 促销方式脑图(转载图灵学院)
  13. 学习代码中的英文单词
  14. linux peek,Peek - Gif 录制软件
  15. 推进智慧工地建设,智慧工地是什么?建筑工地人必看!
  16. 苹果前CEO约翰·斯卡利联合创办的公司Misfit获760万美元融资
  17. 3.暴力破解凯撒密码
  18. 输入一段英文句子,单词之间用若干空格隔开,将每个单词的首字母转换为大写字母。 例如,“I am very glad to see you”的转换结果为“I Am Very Glad To See Yo
  19. 2021年慈溪横河中学高考成绩查询,慈吉中学 2020慈溪市普高排名一览表
  20. NEAR官方文档翻译(二)基础(Basics)- 账户

热门文章

  1. typescript基础
  2. 华为 编程语言实验室,薪水_作为实验室科学家学习编程
  3. raspberry pi cm3+的i2c使用的问题调试
  4. 维斯乐乐高机器人_成为智能机器人服装检测人体细微运动的新型高度灵敏柔性电容传感器...
  5. 启动定时器t0的工作指令是_80c51单片机定时器t0工作于方式1定时时间1ms当晶振为6mhz时求计数初值为多少...
  6. linux cpu大小,如何查看linux cpu大小
  7. win10截图相关教程
  8. mysql binlog是什么_什么是 binlog?
  9. Java中的正则表达式 regex
  10. python优点是代码库支持、灵活_Google将限制Python语言的应用 开发社区热议