Напиши мне за банку чипсов распознавалку штрих-кодов на андроид, чтобы просто в файлики результаты писать и время, брату надоИз интереса пробежался по готовым решениям на js и android, и т.к. у меня смартфон xiaomi с готовым приложением сканером, подумал, почему бы не попробовать просто забирать результаты сканирования из него?В итоге оказалось не брату, да и не надо, и вообще банка чипсов это дорого
Ок, пробовал погуглить инфу об интентах или готовую инструкцию по получению данных из сканера, но тщетно.
Решено провести разведку манифеста приложения на наличие интентов.
- Находим и забираем APK с телефона.
adb shell~:/pm list packages | grep scanner~:/pm path com.xiaomi.scannerexitpull /system/priv-app/MiuiScanner/MiuiScanner.apk
- Декомпилируем apk с помощью онлайн сервиса.
- Исследуем манифест.
Находим первый попавшийся по смыслу экшн.AndroidManifest.xml
- Создаем новый android проект и пишем вызов сканера.
val intent = Intent("miui.intent.action.scanbarcode") startActivityForResult(intent, 1);
- Запускаем приложение, делаем вызов и
запускается сканер и дает спокойно работать, но нужно получить результат, как? Видимо нужен корректный код запроса, или дополнительные данные в интенте. Анализируем декомпилированные исходники в части обработки интентов и попадается следующее.ScanActivity.javaСудя по всему нужно добавить булево значение в интент.
- Ищем нужное имя ключа, которое лежит в
EXTRA_INTENT_IS_BACKTO_THIRDAPP и находим
isBackToThirdApp.AppUtils.java
- Переписываем код вызова сканера.
val intent = Intent("miui.intent.action.scanbarcode") intent.putExtra("isBackToThirdApp",true) startActivityForResult(intent, 1);
- Забираем результат.
super.onActivityResult(requestCode, resultCode, data) if (resultCode==Activity.RESULT_OK){ result.setText(data?.extras?.getString("result")) }
- Короткое видео с примером работы приложения.
- Интерес удовлетворен, и теперь мы можем пользоваться
результатами родного Xiaomi приложения
и сосредоточиться на описании своей логики работы с результатами, поедая чипсы