11 марта, 2025

Сканер штрих-кода

В последнем обновлении приложения QR сканер, кроме очередного обновления используемых библиотек, добавил броадкаст события в системе. Это значит, что если вы в другом приложении подпишетесь на системное событие, можете получить считанный штрихкод. Таким образом, нет необходимости реализовывать у себя модуль для считывания, а можно использовать это приложение как внешний сканер.

Событие, на которое нужно подписаться: ua.com.programmer.qrscanner.BARCODE_SCANNED

Пример того, как выглядит получение данных по подписке на событие:

class BarcodeReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == "ua.com.programmer.qrscanner.BARCODE_SCANNED") {
            val barcodeValue = intent.getStringExtra("BARCODE_VALUE")
            val barcodeFormat = intent.getStringExtra("BARCODE_FORMAT")
            // Handle the received barcode data
            Toast.makeText(context, "Scanned: $barcodeValue ($barcodeFormat)", Toast.LENGTH_LONG).show()
        }
    }
}

Чтобы событие пришло, в манифесте нужно оформить подписку:

<receiver android:name=".BarcodeReceiver">
    <intent-filter>
        <action android:name="ua.com.programmer.qrscanner.BARCODE_SCANNED" />
    </intent-filter>
</receiver>

Напоминаю, что такое QR сканер: приложение открывает при запуске экран камеры и ищет в кадре штрих-коды, QR коды и прочие форматы. Анализ изображения делает Google ML-kit, это библиотека с машинным обучением, какая то часть библиотеки тренируется на входящих данных, то есть, в теории, считывание однотипных данных должно со временем улучшаться. Побочный эфект использования ML — хорошие результаты получаются на хорошем железе, слабый телефон может туго соображать.

Ссылка на приложение на маркете: QR сканер.

Код приложения открыт, можно использовать его как пример реализации сканера в своем приложении. Репозиторий приложения: https://github.com/ruslan-hut/QRScan