OnActivityResult Никогда не называется Phonegap Cordova

Я использую Barcode Scanner Plugin для PhoneGap, используя ZXing в качестве проекта библиотеки.

У меня есть код, который отлично работает на Galaxy Tab 2 (7 "). Тот же код не работает на Galaxy S3.

Проблема: когда ZXing CaptureActivity сканирует штрих-код, он просто заканчивает операцию CaptureActivity и Calling, которая никогда не возвращается с помощью метода onActivityResult.

MainFest.

<activity android:name=".activity.MainActivity" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.google.zxing.client.android.CaptureActivity" android:configChanges="orientation|keyboardHidden" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden" > <intent-filter> <action android:name="com.phonegap.plugins.barcodescanner.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> 

MainActivity.java

 public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) { this.activityResultCallback = command; this.activityResultKeepRunning = this.keepRunning; // If multitasking turned on, then disable it for activities that return // results if (command != null) { this.keepRunning = false; } // Start activity startActivityForResult(intent, requestCode); } protected void onActivityResult(int requestCode, int resultCode, Intent intent) { CordovaPlugin callback = this.activityResultCallback; if (callback != null) { callback.onActivityResult(requestCode, resultCode, intent); } else { Log.e(TAG, "Plugin callback null"); } // else continue with any other code you need in the method super.onActivityResult(requestCode, resultCode, intent); } 

Плагин BarcodeScanner

 private static final String SCAN_INTENT = "com.phonegap.plugins.barcodescanner.SCAN"; public void scan() { Intent intentScan = new Intent(SCAN_INTENT); intentScan.addCategory(Intent.CATEGORY_DEFAULT); this.cordova.startActivityForResult((CordovaPlugin) this, intentScan, AppConstants.CAMERA_SCAN_REQUEST_CODE); } 

У меня есть проект ZXing как проект библиотеки.

Помощь будет оценена по достоинству.

Документация на веб-сайт Per Cordova

Вы должны иметь этот код в своей деятельности:

 @Override public void setActivityResultCallback(CordovaPlugin plugin) { this.activityResultCallback = plugin; } public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) { this.activityResultCallback = command; this.activityResultKeepRunning = this.keepRunning; // If multitasking turned on, then disable it for activities that return results if (command != null) { this.keepRunning = false; } // Start activity super.startActivityForResult(intent, requestCode); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); CordovaPlugin callback = this.activityResultCallback; if (callback != null) { callback.onActivityResult(requestCode, resultCode, intent); } } 

И в дополнение к:

 this.cordova.startActivityForResult((CordovaPlugin) this, intentScan, AppConstants.CAMERA_SCAN_REQUEST_CODE); 

Вы должны иметь следующий способ в своем плагине:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { //do something with the result super.onActivityResult(requestCode, resultCode, intent); } 

Попробуйте поместить этот cordova.setActivityResultCallback (this); Перед вызовом этой активности this.cordova.startActivityForResult((CordovaPlugin) this, intentScan, AppConstants.CAMERA_SCAN_REQUEST_CODE);

В моем классе плагина cordova, прежде чем я вызову метод startActivityForResult, я установил этот класс в качестве обратного вызова результата.

 cordova.setActivityResultCallback(this); 

Ответ, который дал @aviv, абсолютно корректен, и хотя это может не произойти в данном конкретном случае, важно добавить одну деталь:

Когда вы устанавливаете флаги для своих намерений в своем плагине, вы должны помнить о том, чтобы установить флаг как FLAG_ACTIVITY_SINGLE_TOP , а не FLAG_ACTIVITY_NEW_TASK , иначе ваш метод setResult () не вернется так, как ожидалось.

Кроме того, не забудьте убедиться, что ваш манифест объявляет startMode как таковой:

 android:launchMode="singleTop" 

В Android есть странная проблема: если вы запускаете как одно верхние, то все работает нормально, но если вы запускаете как один экземпляр или одиночную задачу, результат будет немедленно возвращен.

Поэтому, пожалуйста, не забудьте добавить это, когда вы собираетесь запустить свой собственный слой из своего плагина

 Intent i = new Intent(cordova.getActivity(), ThanksActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); cordova.startActivityForResult(this, i, 0); PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT); r.setKeepCallback(true); callbackContext.sendPluginResult(r); 
Intereting Posts
Как программно установить приложение запуска по умолчанию? Облачные конечные точки Google App Engine Pr @ blem Marker -> Генерация ошибки в приложении для Android на чистом Android-проекте Попытка вызвать виртуальный метод 'android.content.res.AssetManager android.content.res.Resources.getAssets ()' в ссылке на нулевой объект Каков наилучший способ изучения точного цветового кода, используемого пользовательским интерфейсом приложения Слушайте выход в Facebook с помощью LoginButton. (4,1) Не удалось найти com.google.firebase: firebase-core: 9.0.0 Статическая переменная инициализация на M, но не на L из-за применения onCreate (), вызываемого более одного раза Как заставить TextWatcher ждать некоторое время, прежде чем делать какие-либо действия Невозможно использовать F5 для входа в функцию при отладке на Eclipse Jacoco с Android Gradle 1.3.0 Android получает системные локали разных подходов Статические поля в Android SQLite-запрос очень медленный на Android Воспроизведение звука между точками A и B Нулевой указатель в SearchView AppCompatActivity?