Commit 265be38e authored by wanglei's avatar wanglei

...

parent 251c0733
......@@ -6,6 +6,7 @@ import android.content.pm.PackageManager
import android.graphics.BitmapFactory
import android.graphics.Color
import android.net.Uri
import android.provider.Settings
import androidx.activity.addCallback
import androidx.camera.core.AspectRatio
import androidx.camera.core.Camera
......@@ -18,7 +19,7 @@ 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.PermissionDialog.showGerPermission
import com.base.browserwhite.ui.views.PermissionDialog.showCameraAuthorize
import com.base.browserwhite.utils.BarUtils
import com.base.browserwhite.utils.LogEx
import com.base.browserwhite.utils.PermissionUtils.checkCameraPermission
......@@ -43,7 +44,7 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
private var preview: Preview? = null
private var lensFacing: Int = CameraSelector.LENS_FACING_BACK
private var cameraProvider: ProcessCameraProvider? = null
private lateinit var cameraExecutor: ExecutorService
private var cameraExecutor: ExecutorService? = null
private var imageAnalyzer: ImageAnalysis? = null
private lateinit var qrImageAnalyzer: QRImageAnalyzer
......@@ -51,7 +52,7 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
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
......@@ -62,14 +63,22 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
if (checkCameraPermission()) {
initCamera()
} else {
showGerPermission(
desc = "This feature requires accessing your camera device to scan web QR codes. We will not transfer your data to any third-party services. Please grant permission so that we can provide you with better services",
) {
launcher.launch(arrayOf(Manifest.permission.CAMERA)) { map ->
if (map.values.all { it }) {
initCamera()
} else {
finishToMain()
launcher.launch(arrayOf(Manifest.permission.CAMERA)) { map ->
if (map.values.all { it }) {
initCamera()
} else {
showCameraAuthorize {
launcher.launch(Intent().apply {
action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
data = Uri.fromParts("package", packageName, null)
}) {
if (!checkCameraPermission()) {
finishToMain()
} else {
initCamera()
}
}
}
}
}
......@@ -156,8 +165,10 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
}
//构建图片分析器
imageAnalyzer = buildImageAnalysis(aspectRation, rotation) {
it.setAnalyzer(cameraExecutor, qrImageAnalyzer)
imageAnalyzer = buildImageAnalysis(aspectRation, rotation) { imageAnalyzer ->
cameraExecutor?.let { executor ->
imageAnalyzer.setAnalyzer(executor, qrImageAnalyzer)
}
}
//每次绑定需先解绑
......@@ -215,7 +226,7 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
override fun onDestroy() {
super.onDestroy()
cameraExecutor.shutdown()
cameraExecutor?.shutdown()
imageAnalyzer?.clearAnalyzer()
cameraProvider?.unbindAll()
}
......@@ -228,33 +239,11 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
private fun openFlash() {
// val cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager
// cameraManager.setTorchMode(getBackCameraId(), true)
camera?.cameraControl?.enableTorch(true)
}
private fun closeFlash() {
// val cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager
// cameraManager.setTorchMode(getBackCameraId(), false)
camera?.cameraControl?.enableTorch(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
......@@ -8,8 +8,10 @@ import android.graphics.drawable.ColorDrawable
import android.view.LayoutInflater
import android.view.View
import com.base.browserwhite.R
import com.base.browserwhite.databinding.DialogCameraPermissionAuthorizeBinding
import com.base.browserwhite.databinding.DialogPermissionStorageBottomBinding
import com.base.browserwhite.databinding.DialogPermissonOpenBinding
import com.base.browserwhite.ui.views.PermissionDialog.showPermissionBottomSheet
import com.base.browserwhite.utils.ActivityLauncher
import com.base.browserwhite.utils.PermissionUtils.requestStorePermission
import com.google.android.material.bottomsheet.BottomSheetBehavior
......@@ -85,4 +87,28 @@ object PermissionDialog {
dialog.dismiss()
}
}
@SuppressLint("SetTextI18n")
fun Context.showCameraAuthorize(action: () -> Unit) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogCameraPermissionAuthorizeBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
val appName = resources.getString(R.string.app_name)
binding.tvDesc.text =
"In order to ensure the normal use of the scanning function, $appName needs to obtain camera permissions form you."
binding.tvAuthorize.setOnClickListener {
dialog.dismiss()
action.invoke()
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_edf1f4_tlf15"
android:orientation="vertical">
<ImageView
android:layout_width="80dp"
android:layout_height="6dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="12dp"
android:background="@drawable/bg_c2c8d4_3"
tools:ignore="ContentDescription" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="18dp"
android:src="@mipmap/xiangji"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginHorizontal="25dp"
android:layout_marginTop="24dp"
android:textColor="@color/black"
android:textSize="16sp"
tools:ignore="HardcodedText"
tools:text="In order to ensure the normal use of the scanning function, Al" />
<TextView
android:id="@+id/tv_authorize"
android:layout_width="338dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:layout_marginBottom="24dp"
android:background="@drawable/bg_0571ed_25"
android:gravity="center"
android:text="Go Authorize"
android:textColor="@color/white"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</LinearLayout>
\ 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