Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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.

  • ZXing Lector de código de barras: ¿Cómo hacer frontera personalizada alrededor de la pantalla de captura?
  • Incorporación de ZXing en la aplicación de Android
  • ¿Cómo integrar ZXing Library a Android Studio para escanear códigos de barras?
  • ¿Cómo importar ZXING a android studio?
  • Escaneo de códigos QR sin cámara de pantalla completa
  • Cámara Zxing en modo vertical en Android
  • Uso de ZXing para crear una aplicación de escaneo de códigos de barras Android
  • Android Zxing cambia la orientación al retrato
  • 4 Solutions collect form web for “OnActivityResult Nunca se llama Phonegap Córdoba”

    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); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.