zoukankan      html  css  js  c++  java
  • 安卓扫描条码二维码功能

    说明:这里使用的是zxing,目前还有在更新维护,如果对速度要求高可以使用zbar,不过zbar没有更新维护了

    1、gradle添加依赖

    implementation 'cn.yipianfengye.android:zxing-library:2.2'

    2、添加权限

    <!-- 获取手机相机的权限 -->
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.VIBRATE" />

    3、xml文件添加按钮

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="开启相机扫描"
    android:id="@+id/btn"/>

    4、修改Activity文件

    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            //隐藏系统默认的标题
            val actionBar = supportActionBar
            actionBar?.hide()
            //初始化相机权限
            ZXingLibrary.initDisplayOpinion(this)
            btn.setOnClickListener(object : View.OnClickListener {
                override fun onClick(v: View) {
                    //先判断手机版本是否在6.0以上,如果在6.0以上则需要动态申请权限
                    if (Build.VERSION.SDK_INT > 22) {
                        if (ContextCompat.checkSelfPermission(
                                this@MainActivity,
                                Manifest.permission.CAMERA
                            ) != PackageManager.PERMISSION_GRANTED
                        ) {
                            //先判断有没有权限 ,没有就在这里进行权限的申请
                            ActivityCompat.requestPermissions(
                                this@MainActivity,
                                arrayOf(Manifest.permission.CAMERA), 1
                            )
                        } else {
                            //已经获取到摄像头权限,执行自定义操作
                            val intent = Intent(this@MainActivity, CaptureActivity::class.java)
                            startActivityForResult(intent, 1)
                        }
                    } else {
                        //系统版本在6.0之下,不需要动态获取权限。
                        val intent = Intent(this@MainActivity, CaptureActivity::class.java)
                        startActivityForResult(intent, 1)
                    }
                }
            })
        }
    
        //获取手机相机权限
        override fun onRequestPermissionsResult(
            requestCode: Int,
            permissions: Array<String>,
            grantResults: IntArray
        ) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults)
            if (requestCode == 1) {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    val intent = Intent(this, CaptureActivity::class.java)
                    startActivityForResult(intent, 1)
                } else {
                    Toast.makeText(this@MainActivity, "请打开相机权限", Toast.LENGTH_SHORT).show()
                }
            }
        }
    
        //处理扫描结果
        override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
            if (resultCode == Activity.RESULT_OK) {
                if (data != null) {
                    val bundle = data.extras ?: return
                    if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
                        //获取到扫描结果
                        val result = bundle.getString(CodeUtils.RESULT_STRING)
                        if (result != null) {
                            Log.d("res:", result)
                        }
                    }
                }
            }
        }
  • 相关阅读:
    自定义Toast
    自定义控件三部曲之动画篇(四)——ValueAnimator基本使用
    关于ShapeDrawable应用的一些介绍(下)
    关于ShapeDrawable应用的一些介绍(中)之Gradient
    关于ShapeDrawable应用的一些介绍(上)
    android 经典博客
    PopUpWindow使用详解(二)——进阶及答疑
    详解Dialog(二)——有关列表的构建
    安装eclipse的maven插件
    fragment.setMenuVisibility setUserVisibleHint
  • 原文地址:https://www.cnblogs.com/zyb2016/p/14182478.html
Copyright © 2011-2022 走看看