Accessing AutoFocus/Flash with Google Vision BarCode Reader

后端 未结 3 1358
渐次进展
渐次进展 2021-01-12 07:43

I am playing with the original example of BarCode scanner here:

https://github.com/googlesamples/android-vision/blob/master/visionSamples/barcode-reader/app/src/main

3条回答
  •  清歌不尽
    2021-01-12 08:13

    Here is a working kotlin variant:

    private var flashmode: Boolean = false
    private var camera: Camera? = null
    
    private fun flashOnButton() {
        camera = getCamera(cameraSource)
    
        if (camera != null) {
            try {
                val param = camera!!.parameters
    
                param.setFlashMode(if (!flashmode) Camera.Parameters.FLASH_MODE_TORCH else Camera.Parameters.FLASH_MODE_OFF)
                camera?.parameters = param
                flashmode = !flashmode
            } catch (e: java.lang.Exception) {
                e.printStackTrace()
            }
        }
    }
    
    private fun getCamera(cameraSource: CameraSource): Camera? {
        val declaredFields = CameraSource::class.java.declaredFields
    
        for (field in declaredFields) {
            if (field.type === Camera::class.java) {
                field.isAccessible = true
    
                try {
                    val camera = field.get(cameraSource) as Camera
                    return if (camera != null) {
                        camera
                    } else null
                } catch (e: IllegalAccessException) {
                    e.printStackTrace()
                }
    
                break
            }
        }
    
        return null
    }
    

    This solution works for now. But I don't know how to handle this, when android.hardware.Camera is not supported anymore in the future. Maybe there is a better solution without android.hardware.Camera?

提交回复
热议问题