QR Scanner

MainActivity


import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
import androidmads.library.qrgenearator.QRGContents
import androidmads.library.qrgenearator.QRGEncoder
import com.google.zxing.WriterException

class MainActivity : AppCompatActivity() {
var im: ImageView? = null
var bGenerate: Button? = null
var bScanner: Button? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
im = findViewById(R.id.imageView)
bGenerate = findViewById(R.id.button)
bScanner = findViewById(R.id.bScan)
bScanner?.setOnClickListener {
startActivity(Intent(this, ScannerActivity::class.java))
}
bGenerate?.setOnClickListener {
generateQrCode("Поставь лайк если понравилось видео!!")
}
}

private fun generateQrCode(text: String){
val qrGenerator = QRGEncoder(text, null, QRGContents.Type.TEXT, 500)
try {
val bMap = qrGenerator.encodeAsBitmap()
im?.setImageBitmap(bMap)
} catch (e: WriterException){

}
}
}

ScannerActivity


import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import me.dm7.barcodescanner.zbar.Result
import me.dm7.barcodescanner.zbar.ZBarScannerView

class ScannerActivity : AppCompatActivity(), ZBarScannerView.ResultHandler {
private lateinit var zbView: ZBarScannerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
zbView = ZBarScannerView(this)
setContentView(zbView)
}

override fun onResume() {
super.onResume()
zbView.setResultHandler(this)
zbView.startCamera()
}

override fun onPause() {
super.onPause()
zbView.stopCamera()
}

override fun handleResult(result: Result?) {
Log.d("MyLog","Result:${result?.contents}")
finish()
}
}

activity_main.xml

<?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"
android:background="#6E6E6E"
tools:context=".MainActivity">

<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:text="Generate"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent" />

<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardCornerRadius="5dp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:orientation="horizontal">

<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:srcCompat="@tools:sample/avatars" />
</LinearLayout>

</androidx.cardview.widget.CardView>

<Button
android:id="@+id/bScan"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Scanner"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="@+id/button"
app:layout_constraintStart_toStartOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>

Зависимость

implementation 'me.dm7.barcodescanner:zbar:1.8.4'

Разрешение в AndroidManifest

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

4 комментария для “QR Scanner”

  1. Привет! Спасибо за урок, но как сделать определение qr-кода из массива, например, и запуска связанного с ним контента?

  2. ПРивет, спасибо за урок, все отлично получилось! НО, у меня есть шк, вот тут фотка https://ibb.co/Fqm9z4K
    почему-то он не видит первые 3 цифры, т.е. вместо 9785902862383, он выдает мне 902862383 и так по многим шк, нет идей почему такое может быть?

  3. Здравствуйте. Не нашел в комментариях что бы у кого-то была подобная ошибка. У меня при сканирований QR кода с текстовой строкой результат выдает как набор цифр
    bcFormat: DATABAR Result: 0120937759187932
    при этом при повторном сканировании того же кода – набор цифр уже другой
    bcFormat: DATABAR Result: 0102897278251764
    И при каждом следующем сканировании выводится новый набор цифр
    При этом если я сканирую сторонней программой для чтения Qr кода, то правильно считывается заданная строка. Подскажите пожалуйста в чем может быть дело?

Добавить комментарий

Ваш адрес email не будет опубликован.