В последнем обновлении приложения 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