1

I got toast error Unable to access camera It goes codeScanner.errorCallback = ErrorCallback I gave camera permission in Manifest correctly

Here's my kt code.

class scannerActivity: AppCompatActivity() {

private lateinit var codeScanner: CodeScanner
val MY_CAMERA_PERMISSION_REQUEST = 1111

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_scanner)

          val Button = findViewById<Button>(R.id.button6)
          Button.setOnClickListener {
           startActivity(Intent(this@scannerActivity, conductorMenu::class.java))}

        val scannerView = findViewById<CodeScannerView>(R.id.scannerView)

        codeScanner = CodeScanner(this@scannerActivity, scannerView)
        codeScanner.camera = CodeScanner.CAMERA_BACK
        codeScanner.formats = CodeScanner.ALL_FORMATS
        codeScanner.autoFocusMode = AutoFocusMode.SAFE
        codeScanner.scanMode = ScanMode.SINGLE
        codeScanner.isAutoFocusEnabled = true
        codeScanner.isFlashEnabled = false

        codeScanner.decodeCallback = DecodeCallback {

            runOnUiThread {
                Toast.makeText(this@scannerActivity, "Scan result: ${it.text}", Toast.LENGTH_LONG).show()
            }
        }

        codeScanner.errorCallback = ErrorCallback {

            runOnUiThread {
                Toast.makeText(this@scannerActivity, "Camera error: ${it.message}", Toast.LENGTH_LONG).show()
            }
        }

       checkPermission()

    }

    fun checkPermission(){
        if (ContextCompat.checkSelfPermission(this@scannerActivity, Manifest.permission.CAMERA)!=PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this@scannerActivity, arrayOf(Manifest.permission.CAMERA), MY_CAMERA_PERMISSION_REQUEST)

        } else{
            codeScanner.startPreview()
        }
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode==MY_CAMERA_PERMISSION_REQUEST && grantResults.isNotEmpty() && grantResults[0]==PackageManager.PERMISSION_GRANTED){
            codeScanner.startPreview()
        }
        else{
            Toast.makeText(this@scannerActivity, "Cannot scan until you give camera permission", Toast.LENGTH_LONG).show()
        }
    }

    override fun onResume() {
        super.onResume()
        codeScanner.startPreview()
    }

    override fun onPause() {
        codeScanner.releaseResources()
        super.onPause()
    }
}

`<uses-permission android:name="android.permission.CAMERA"/>` 

Help to fix this?

  • Does this answer your question? [Android gives error "Cannot fit requested classes in a single dex file"](https://stackoverflow.com/questions/51341627/android-gives-error-cannot-fit-requested-classes-in-a-single-dex-file) – Nitish Oct 06 '21 at 10:00

1 Answers1

0

First you have to put multidex in your build gradle

android {
    defaultConfig {
        ...
        minSdkVersion(15) 
        targetSdkVersion(28)
        multiDexEnabled = true
    }
    ...
}

dependencies {
    implementation("androidx.multidex:multidex:2.0.1")
}

Then you have 3 ways you pick from 1.) Manifest File

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="androidx.multidex.MultiDexApplication" >
        ...
    </application>
</manifest>

2.) Override application class

class MyApplication : MultiDexApplication() {...}

3.) Add Multidex Function to Application Class

class MyApplication : SomeOtherApplication() {

    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        MultiDex.install(this)
    }

In some cases you may have to make modifications to your progaurd as well. You can read more about it here https://developer.android.com/studio/build/multidex#kts }

Drivers Sea
  • 446
  • 2
  • 10
  • Thanks, it works but, after that I got toast error `Unable to access camera` It goes `codeScanner.errorCallback = ErrorCallback` I gave camera permission in Manifest –  Oct 06 '21 at 10:35