Забираем результат сканирования штрих-кода из родного Xiaomi приложения

от автора

У коллеги возникло предложение:

«Напиши мне за банку чипсов распознавалку штрих-кодов на андроид, чтобы просто в файлики результаты писать и время, брату надо»
В итоге оказалось не брату, да и не надо, и вообще банка чипсов это дорого

Из интереса пробежался по готовым решениям на js и android, и т.к. у меня смартфон xiaomi с готовым приложением сканером, подумал, почему бы не попробовать просто забирать результаты сканирования из него?
Ок, пробовал погуглить инфу об интентах или готовую инструкцию по получению данных из сканера, но тщетно.
Решено провести разведку манифеста приложения на наличие интентов.

  1. Находим и забираем APK с телефона.
    adb shell ~:/pm list packages | grep scanner ~:/pm path com.xiaomi.scanner exit pull /system/priv-app/MiuiScanner/MiuiScanner.apk 
  2. Декомпилируем apk с помощью онлайн сервиса.
  3. Исследуем манифест.
    Находим первый попавшийся по смыслу экшн.
    AndroidManifest.xml

  4. Создаем новый android проект и пишем вызов сканера.
      val intent = Intent("miui.intent.action.scanbarcode")    startActivityForResult(intent, 1); 
  5. Запускаем приложение, делаем вызов и…
    запускается сканер и дает спокойно работать, но нужно получить результат, как? Видимо нужен корректный код запроса, или дополнительные данные в интенте. Анализируем декомпилированные исходники в части обработки интентов и попадается следующее.
    ScanActivity.java

    Судя по всему нужно добавить булево значение в интент.

  6. Ищем нужное имя ключа, которое лежит в EXTRA_INTENT_IS_BACKTO_THIRDAPP и находим isBackToThirdApp.
    AppUtils.java

  7. Переписываем код вызова сканера.
      val intent = Intent("miui.intent.action.scanbarcode")   intent.putExtra("isBackToThirdApp",true)   startActivityForResult(intent, 1); 
  8. Забираем результат.
            super.onActivityResult(requestCode, resultCode, data)         if (resultCode==Activity.RESULT_OK){                 result.setText(data?.extras?.getString("result"))         }  
  9. Короткое видео с примером работы приложения.
  10. Интерес удовлетворен.

ссылка на оригинал статьи https://habr.com/ru/post/515590/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *