We are currently creating a program to launch the camera on Android devices using the following programs:
package com.example.mycameraxapp;
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.Manifest
import android.content.pm.PackageManager
import android.net.Uri
import android.util.Log
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import java.util.current.Executors
import androidx.camera.core.*
import androidx.camera.lifecycle.ProcessCameraProvider
import kotlinx.android.synthetic.main.activity_main.*
import java.io.File
import java.nio.ByteBuffer
import java.text.SimpleDateFormat
import java.util.*
import java.util.current.ExecutorService
import androidx.camera.core.CameraControl
typealias LumaListener=(luma:Double) - > Unit
classMainActivity:AppCompatActivity(){
private var imageCapture: ImageCapture?= null
private lateinit var outputDirectory:File
private lateinit varcameraExecutor:ExecutorService
override fun onCreate (savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Request camera permissions
if(allPermissionsGranted()) {
startCamera()
} else{
ActivityCompat.requestPermissions(
this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS)
}
// Setup the listener for take photo button
camera_capture_button.setOnClickListener {takePhoto()}
outputDirectory=getOutputDirectory()
cameraExecutor=Executors.newSingleThreadExecutor()
}
private funtakePhoto(){}
private fun startCamera(){
valcameraProviderFuture=ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener(Runable{
// Used to bind the life cycle of camera to the life cycle owner
valcameraProvider: ProcessCameraProvider=cameraProviderFuture.get()
// Preview
val preview=Preview.Builder()
.build()
.also{
it.setSurfaceProvider (viewFinder.surfaceProvider)
}
// Select back camera as a default
valcameraSelector=CameraSelector.DEFAULT_BACK_CAMERA
try{
// Unbind uses before rebinding
cameraProvider.unbindAll()
// Bind use cases to camera
cameraProvider.bindToLifecycle(
this, cameraSelector, preview)
} catch(exc:Exception){
Log.e(TAG, "Use case binding failed", exc)
}
// exposure correction value setting
varcameraexpose=Camera.CameraControl()
cameraexpose.setExposeCompensationIndex(30)
}, ContextCompat.getMainExecutor(this))
}
private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all {
ContextCompat.checkSelfPermission(
baseContext, it) == PackageManager.PERMISSION_GRANTED
}
private fungetOutputDirectory():File{
valmediaDir=externalMediaDirs.firstOrNull()?let{
File(it,resources.getString(R.string.app_name))).apply {mkdirs()}
return if (mediaDir!=null&mediaDir.exists())
mediaDir else filesDir
}
override fun onDestroy() {
super.onDestroy()
cameraExecutor.shutdown()
}
US>companion object {
private constval TAG = "CameraXBasic"
private constval FILENAME_FORMAT="yyyy-MM-dd-HH-mm-ss-SSS"
private constant REQUEST_CODE_PERMISSIONS = 10
private value REQUIRED_PERMISSIONS=arrayOf(Manifest.permission.CAMERA)
}
override fun onRequestPermissionsResult(
requestCode:Int,permissions:Array<String>,grantResults:
IntArray) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults)
if(requestCode==REQUEST_CODE_PERMISSIONS) {//Verify that the request code is correct
if(allPermissionsGranted()) {//Launch Camera if you have access to the Camera
startCamera()
} Else {// If you don't have permission, present toast to notify you that you don't have permission
Toast.makeText(this,
"Permissions not granted by the user.",
Toast.LENGTH_SHORT).show()
finish()
}
}
}
}
Now that I can start the camera, I'm trying to change the exposure correction value on the preview screen, so I'm making it based on the official documentation, but I don't know how to implement the official content.
I am trying to change the value using the setExposeCompensationIndex on this site.
As mentioned above, we have imported the "CameraControl" interface with setExposeCompensationIndex as a method.
import androidx.camera.core.CameraControl
"Also, I wrote the following to use the method, but the CameraControl part is in the red with ""Rename Reference"" and it doesn't work."
//Set exposure correction value
varcameraexpose=Camera.CameraControl()
cameraexpose.setExposeCompensationIndex(30)
Looking at the official documentation, I don't know how to implement it in detail.
java android kotlin
When working with camera, you must work with the instance associated with the life cycle.
val camera=cameraProvider.bindToLifecycle(this,cameraSelector,preview)
If you want to configure exposure compensation, make sure it is supported first.
val exposureState=camera.cameraInfo.exposureState
if(exposeState.isExposeCompensationSupported){...}
If the terminal camera supports it, set the exposure compensation value.
For example, the exposure compensation is 30, but you must specify a range.
This may vary from terminal to terminal.
if(exposeState.isExposeCompensationSupported){
value range=exposeState.exposeCompensationRange
if(range.contains(30)){
camera.cameraControl.setExposeCompensationIndex(30)
}
}
If the camerax version is 1.0 series, exposure correction can cause errors for the experimental API.
771 GDB gets version error when attempting to debug with the Presense SDK (IDE)
1235 When building Fast API+Uvicorn environment with PyInstaller, console=False results in an error
758 Error in x, y, and format string must not be None
856 Uncaught (inpromise) Error on Electron: An object could not be cloned
© 2025 OneMinuteCode. All rights reserved.