Я использую 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);
}
}