OnActivityResult Nunca se llama Phonegap Córdoba

Estoy usando el plugin de escáner de código de barras para PhoneGap usando ZXing como proyecto de biblioteca.

Tengo un código que funciona perfectamente en Galaxy Tab 2 (7 "). El mismo código no funciona en el Galaxy S3.

Problema: Cuando ZXing CaptureActivity escanea el código de barras acaba de terminar la actividad CaptureActivity y Calling nunca vuelve con el método 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); } 

Plugin de 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); } 

Tengo el proyecto ZXing como proyecto de biblioteca.

La ayuda sería apreciada.

Documentación de la vista web de Per Cordova

Necesitas tener este código en tu actividad:

 @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); } } 

Y además de:

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

Usted necesita tener el siguiente método en su plugin:

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

Intenta poner esto cordova.setActivityResultCallback (this); Justo antes de llamar a la actividad this.cordova.startActivityForResult((CordovaPlugin) this, intentScan, AppConstants.CAMERA_SCAN_REQUEST_CODE);

En mi clase de plugin cordova, antes de llamar al método startActivityForResult establezco esta clase como la devolución de llamada de resultado.

 cordova.setActivityResultCallback(this); 

La respuesta que @aviv dio es absolutamente correcta, y aunque esto puede no haber ocurrido en este caso en particular, es importante agregar un detalle:

Cuando establezca las banderas de su intención en su complemento, debe recordar configurar el indicador como FLAG_ACTIVITY_SINGLE_TOP , en lugar de FLAG_ACTIVITY_NEW_TASK , de lo contrario su método setResult () no volverá como se esperaba.

Además, recuerde asegurarse de que su manifiesto declare el launchMode como tal:

 android:launchMode="singleTop" 

Hay un problema extraño en Android, donde si se ejecuta como un solo principio cosas parecen funcionar bien, pero si se ejecuta como una sola instancia o una sola tarea el resultado volverá inmediatamente.

Así que recuerda agregar esto cuando estés a punto de lanzar tu capa nativa desde tu plugin

 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); 
  • Zxing onActivityResult no se llama en Fragmento sólo en Actividad
  • Introducción a ZXing en Android
  • Si hay cualquier tutorial para android zxing biblioteca con Fragmentos
  • Codificación y decodificación de bytes con ZXing
  • Cómo codificar una cadena en un código QR usando zxing en Android?
  • Uso de zxing Barcode Scanner dentro de una página web
  • ¿Cómo abrir la pantalla de escaneo "zxing Barcode" en una pequeña ventana?
  • Zxing usando diseño personalizado
  • Escáner de código de barras ZXing para Webapps
  • Opciones de Zxing barcode camera
  • Android - Barcode Scanning, Opciones? Zxing?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.