Использование IntentIntegrator для захвата QR-кода не работает в Activity - PullRequest
0 голосов
/ 09 октября 2018

Я использую IntentIntegrator для захвата QR-кодов в Fragment и Activity.Он хорошо работает в Fragment, используя forSupportFragment() статический метод IntentIntegrator.Однако использование экземпляра IntentIntegrator в AppCompatActivity возвращает resultCode -1 в onActivityResult().Результат сканирования, полученный статическим методом parseActivityResult() из IntentResult, всегда возвращает ноль.(Код ниже)
После посещения ряда ( Один , Два , Три и т. Д.) Вопросов по S / O, я попробовал все предложенные решения:

  • Блокировка ориентации экрана в манифесте
  • Определение изменений конфигурации в манифесте
  • Определение класса-оболочки библиотек
  • с использованием метода setOrientationLocked()IntentIntegrator для блокировки ориентации

Ни один из них не работал.

Благодаря тому, что я считаю рискованной альтернативой, я смог получить объект Bundle из Intent.getExtras() вonActivityResult() и использовал keySet() для обнаружения всех возвращенных данных.Из Bundle можно извлечь следующее, но я тестировал getString() только на одном, так как я не уверен в других типах:

  • SCAN_RESULT: содержит содержимое QR
  • SCAN_RESULT_BYTE_SEGMENTS_0
  • SCAN_RESULT_BYTES
  • SCAN_RESULT_FORMAT
  • SCAN_RESULT_ERROR_CORRECTION_LEVEL
  • 1053сбой в какой-то момент.Любые другие предлагаемые решения приветствуются.
    код:
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    
        if (scanResult != null) {
            Log.w(TAG, "onActivityResult() QR content -> " + scanResult.getContents());
            switch (requestCode) {
                case USER_INFO_REQUEST:
                    do.Something(scanResult.getContents());
                    break;
    
                case ORG_USER_INFO_REQUEST:
                    do.Something(scanResult.getContents());
                    break;
    
                    default:
                        Log.w(TAG,"onActivityResult() not yet implemented");
                        break;
            }
        } else {
            Log.e(TAG, "onActivityResult() empty QR response");
            Log.w(TAG, "onActivityResult() result code -> " + resultCode);
            Log.w(TAG, "onActivityResult() request code -> " + requestCode);
            Log.w(TAG, "onActivityResult() data -> " +data);
    
         try {
             Bundle bundle = data.getExtras();
             switch (requestCode){
    
                 case USER_INFO_REQUEST:
                     do.Something(bundle.getString(AppConst.KEY_BUNDLE_SCAN_RESULT));
                     break;
    
                 case ORG_USER_INFO_REQUEST:
                     do.Something(bundle.getString(AppConst.KEY_BUNDLE_SCAN_RESULT));
                     break;
    
                 default:
                     Log.w(TAG,"onActivityResult() not yet implemented");
                     break;
             }
         }catch (NullPointerException npEx){
             Log.e(TAG,"onActivityResult() NPEX -> "+npEx.toString());
         }catch (Exception ex){
             Log.e(TAG,"onActivityResult() -> "+ex.toString());
         }
           super.onActivityResult(requestCode, resultCode, data);
        }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...