QR Code Scanner Android Kotlin
..............................................................................................................
//Zxing for Bar code scanning
implementation 'com.journeyapps:zxing-android-embedded:4.2.0'
implementation 'com.budiyev.android:code-scanner:2.1.0'
implementation 'com.karumi:dexter:6.2.3'
Main Activity................................................................. package com.holisol.cerebrum.QRScan
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.budiyev.android.codescanner.*
import com.holisol.cerebrum.R
import kotlinx.android.synthetic.main.activity_bar_code_scanner.*
import java.text.SimpleDateFormat
import java.util.*
class QRCodeScannerActivity : AppCompatActivity() {
private lateinit var codeScanner: CodeScanner
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_bar_code_scanner)
// val TimeStamp: String = java.lang.String.valueOf(
// java.util.concurrent.TimeUnit.MILLISECONDS.toSeconds(
// System.currentTimeMillis()
// )
// )
val s = SimpleDateFormat("dd:MM:yyyy,hh:mm:ss")
val format: String = s.format(Date())
val scannerView = findViewById<CodeScannerView>(R.id.scanner_view)
codeScanner = CodeScanner(this, scannerView)
// Parameters (default values)
codeScanner.camera = CodeScanner.CAMERA_BACK // or CAMERA_FRONT or specific camera id
codeScanner.formats = CodeScanner.ALL_FORMATS // list of type BarcodeFormat,
// ex. listOf(BarcodeFormat.QR_CODE)
codeScanner.autoFocusMode =AutoFocusMode.SAFE // or CONTINUOUS
codeScanner.scanMode = ScanMode.SINGLE // or CONTINUOUS or PREVIEW
codeScanner.isAutoFocusEnabled = true // Whether to enable auto focus or not
codeScanner.isFlashEnabled = false // Whether to enable flash or not
// Callbacks
codeScanner.decodeCallback = DecodeCallback {
runOnUiThread {
// Toast.makeText(this, "Scan result: ${it.text}", Toast.LENGTH_LONG).show()
val sendData = Intent(
this@QRCodeScannerActivity,
ScanResultActivity::class.java
)
sendData.putExtra("RESULT", it.text.toString())
sendData.putExtra("BarCodeFormat",it.barcodeFormat.toString())
sendData.putExtra("resultMetadata",it.resultMetadata.toString())
sendData.putExtra("resultPoints",it.resultPoints.toString())
sendData.putExtra("resultMetadata",it.resultMetadata.toString())
sendData.putExtra("timestamp",format)
startActivity(sendData)
// val scanresult = {it.text}
// val bundle = Bundle()
// bundle.putString("scrslt", scanresult.toString())
// // set Fragmentclass Arguments
// val fragobj = ScanResultFragment()
// fragobj.setArguments(bundle)
}
}
codeScanner.errorCallback = ErrorCallback { // or ErrorCallback.SUPPRESS
runOnUiThread {
Toast.makeText(this, "Camera initialization error: ${it.message}",
Toast.LENGTH_LONG).show()
}
}
scannerView.setOnClickListener {
// codeScanner.startPreview()
}
}
override fun onResume() {
super.onResume()
codeScanner.startPreview()
}
override fun onPause() {
codeScanner.releaseResources()
super.onPause()
}
}
.....................................................................
Activity scanner:-
package com.holisol.cerebrum.QRScan
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.holisol.cerebrum.R
import kotlinx.android.synthetic.main.activity_scan_result.*
class ScanResultActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_scan_result)
val result = intent.getStringExtra("RESULT")
val format = intent.getStringExtra("BarCodeFormat")
val resultMetadata = intent.getStringExtra("resultMetadata")
val resultPoints = intent.getStringExtra("resultPoints")
val timestamp = intent.getStringExtra("timestamp")
IDActivityScanResult.setText(result)
IDActivityScanformat.setText(format)
IDActivityScanresultPoints.setText(resultPoints)
IDActivityScanresultMetadata.setText(resultMetadata)
IDActivityScanTime.setText(timestamp)
}
}
........................................................................
XML activity:-
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".QRScan.QRCodeScannerActivity"
android:background="@color/white">
<com.budiyev.android.codescanner.CodeScannerView
android:id="@+id/scanner_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:autoFocusButtonColor="@color/teal_200"
app:autoFocusButtonVisible="true"
app:flashButtonColor="@color/ic_launcher_background"
app:flashButtonVisible="true"
app:frameAspectRatioHeight="1"
app:frameAspectRatioWidth="1"
app:frameColor="@color/ic_launcher_background"
app:frameCornersRadius="0dp"
app:frameCornersSize="50dp"
app:frameSize="0.75"
app:frameThickness="2dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:maskColor="#77000000" />
<!-- <Button-->
<!-- android:id="@+id/IDviewscanresult"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="View Result"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintHorizontal_bias="0.498"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@+id/scanner_view"-->
<!-- app:layout_constraintVertical_bias="0.384"-->
<!-- tools:ignore="MissingConstraints" />-->
</androidx.constraintlayout.widget.ConstraintLayout>
Source
https://androiddvlpr.com/zxing-android-example/
Comments
Post a Comment