Commit 60562622 authored by wanglei's avatar wanglei

...

parent 7b99c807
package com.base.browserwhite.ui.activity.scanqrc package com.base.browserwhite.ui.activity.scanqrc
import android.Manifest import android.Manifest
import android.content.pm.PackageManager
import android.graphics.Color 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.activity.addCallback
import androidx.camera.core.AspectRatio import androidx.camera.core.AspectRatio
import androidx.camera.core.Camera import androidx.camera.core.Camera
...@@ -9,11 +13,13 @@ import androidx.camera.core.CameraSelector ...@@ -9,11 +13,13 @@ import androidx.camera.core.CameraSelector
import androidx.camera.core.Preview import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.browserwhite.databinding.ActivityScanQrcBinding import com.base.browserwhite.databinding.ActivityScanQrcBinding
import com.base.browserwhite.ui.activity.BaseActivity import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.ui.views.DialogViews.showGerPermission import com.base.browserwhite.ui.views.DialogViews.showGerPermission
import com.base.browserwhite.utils.BarUtils import com.base.browserwhite.utils.BarUtils
import com.base.browserwhite.utils.LogEx
import com.base.browserwhite.utils.PermissionHelp.checkCameraPermission import com.base.browserwhite.utils.PermissionHelp.checkCameraPermission
import java.util.concurrent.ExecutorService import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors import java.util.concurrent.Executors
...@@ -21,12 +27,16 @@ import kotlin.math.abs ...@@ -21,12 +27,16 @@ import kotlin.math.abs
import kotlin.math.max import kotlin.math.max
import kotlin.math.min import kotlin.math.min
class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() { class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
private val TAG = "ScanQRCActivity"
override val binding: ActivityScanQrcBinding by lazy { override val binding: ActivityScanQrcBinding by lazy {
ActivityScanQrcBinding.inflate(layoutInflater) ActivityScanQrcBinding.inflate(layoutInflater)
} }
//相机 //相机
private var camera: Camera? = null private var camera: Camera? = null
private var preview: Preview? = null private var preview: Preview? = null
...@@ -40,6 +50,12 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() { ...@@ -40,6 +50,12 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT) BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight()) 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()) { if (checkCameraPermission()) {
initCamera() initCamera()
} else { } else {
...@@ -65,11 +81,24 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() { ...@@ -65,11 +81,24 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
onBackPressedDispatcher.onBackPressed() 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 { } binding.ivPhoto.setOnClickListener { }
} }
private fun initCamera() { private fun initCamera() {
cameraExecutor = Executors.newSingleThreadExecutor() cameraExecutor = Executors.newSingleThreadExecutor()
val cameraProviderFuture = ProcessCameraProvider.getInstance(this) val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
...@@ -153,4 +182,33 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() { ...@@ -153,4 +182,33 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
private const val RATIO_4_3_VALUE = 4.0 / 3.0 private const val RATIO_4_3_VALUE = 4.0 / 3.0
private const val RATIO_16_9_VALUE = 16.0 / 9.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