Change theme
Help
Press space for more information.
Show links for this issue (Shortcut: i, l)
Copy issue ID
Previous Issue (Shortcut: k)
Next Issue (Shortcut: j)
Sign in to use full features.
Vote: I am impacted
Notification menu
Refresh (Shortcut: Shift+r)
Go home (Shortcut: u)
Pending code changes (auto-populated)
View issue level access limits(Press Alt + Right arrow for more information)
Attachment actions
Unintended behavior
View staffing
Description
androidx.camera.view.PreviewView is showing black screen
package com.ryvl.quickcard.ui
import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Size
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector
import androidx.camera.core.ExperimentalGetImage
import androidx.camera.core.ImageAnalysis
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
import com.google.common.util.concurrent.ListenableFuture
import com.google.mlkit.vision.barcode.BarcodeScanning
import com.google.mlkit.vision.barcode.common.Barcode
import com.google.mlkit.vision.common.InputImage
import com.ryvl.quickcard.R
import com.ryvl.quickcard.databinding.ActivityXoxoactivityBinding
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
@ExperimentalGetImage
class XOXOActivity : AppCompatActivity() {
private lateinit var previewView: PreviewView
// private lateinit var scanningBox: View
private lateinit var cameraExecutor: ExecutorService
private lateinit var binding: ActivityXoxoactivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_xoxoactivity)
previewView = binding.previewView
// scanningBox = binding.scanningBox
cameraExecutor = Executors.newSingleThreadExecutor()
startScanning()
}
private fun startScanning() {
val barcodeScanner = BarcodeScanning.getClient()
val cameraProviderFuture: ListenableFuture<ProcessCameraProvider> = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
val imageAnalysis = ImageAnalysis.Builder()
.setTargetResolution(Size(1280, 720))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
imageAnalysis.setAnalyzer(cameraExecutor, { image ->
val inputImage = InputImage.fromMediaImage(
image.image!!, image.imageInfo.rotationDegrees
)
barcodeScanner.process(inputImage)
.addOnSuccessListener { barcodes ->
for (barcode in barcodes) {
if (barcode.format == Barcode.FORMAT_QR_CODE) {
val qrCodeData = barcode.rawValue
// Handle the QR code data
}
}
}
.addOnFailureListener { e ->
// Handle error
}
.addOnCompleteListener { image.close() }
})
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
cameraProvider.bindToLifecycle(this,cameraSelector, imageAnalysis)
}
// cameraProvider.bindToLifecycle(this, cameraSelector, imageAnalysis)
}, ContextCompat.getMainExecutor(this))
}
override fun onDestroy() {
super.onDestroy()
cameraExecutor.shutdown()
}
}