Commit 60562622 authored by wanglei's avatar wanglei

...

parent 7b99c807
package com.base.browserwhite.ui.activity.scanqrc
import android.Manifest
import android.content.pm.PackageManager
import android.graphics.Color
import android.hardware.camera2.CameraAccessException
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraManager
import androidx.activity.addCallback
import androidx.camera.core.AspectRatio
import androidx.camera.core.Camera
......@@ -9,11 +13,13 @@ import androidx.camera.core.CameraSelector
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import com.base.browserwhite.databinding.ActivityScanQrcBinding
import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.ui.views.DialogViews.showGerPermission
import com.base.browserwhite.utils.BarUtils
import com.base.browserwhite.utils.LogEx
import com.base.browserwhite.utils.PermissionHelp.checkCameraPermission
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
......@@ -21,12 +27,16 @@ import kotlin.math.abs
import kotlin.math.max
import kotlin.math.min
class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
private val TAG = "ScanQRCActivity"
override val binding: ActivityScanQrcBinding by lazy {
ActivityScanQrcBinding.inflate(layoutInflater)
}
//相机
private var camera: Camera? = null
private var preview: Preview? = null
......@@ -40,6 +50,12 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
val hasFlash = this.packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)
binding.ivShoudian.isVisible = hasFlash
if (hasFlash) {
binding.ivShoudian.isSelected = false
}
if (checkCameraPermission()) {
initCamera()
} else {
......@@ -65,11 +81,24 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
onBackPressedDispatcher.onBackPressed()
}
binding.ivShoudian.setOnClickListener { }
binding.ivShoudian.setOnClickListener {
try {
if (binding.ivShoudian.isSelected) {
closeFlash()
} else {
openFlash()
}
} catch (e: Exception) {
LogEx.logDebug(TAG, "flash $e")
return@setOnClickListener
}
binding.ivShoudian.isSelected = !binding.ivShoudian.isSelected
}
binding.ivPhoto.setOnClickListener { }
}
private fun initCamera() {
cameraExecutor = Executors.newSingleThreadExecutor()
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
......@@ -153,4 +182,33 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
private const val RATIO_4_3_VALUE = 4.0 / 3.0
private const val RATIO_16_9_VALUE = 16.0 / 9.0
}
private fun openFlash() {
val cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager
cameraManager.setTorchMode(getBackCameraId(), true)
}
private fun closeFlash() {
val cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager
cameraManager.setTorchMode(getBackCameraId(), false)
}
private fun getBackCameraId(): String {
var cameraId: String? = null
try {
val cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager
for (id in cameraManager.cameraIdList) {
val characteristics: CameraCharacteristics = cameraManager.getCameraCharacteristics(id)
if (characteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_BACK) {
cameraId = id
break
}
}
} catch (e: CameraAccessException) {
e.printStackTrace()
}
return cameraId ?: ""
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment