PhoneGap / Android, abra ChildBrowser desde .shouldOverrideUrlLoading ()

Estoy empaquetando un sitio web para móviles (a través de la red) en PhoneGap y me gustaría interceptar ciertos enlaces y abrirlos usando el complemento de ChildBrowser . ¿Es posible activar ChildBrowser desde el código nativo (ya he determinado qué enlaces interceptar)

He intentado por debajo del código, pero resulta en NULLPointerException:

ChildBrowser childBrowser = new ChildBrowser(); childBrowser.openExternal(url, true); 

Detalles de la excepción:

 07-29 10:49:52.632 947-947/com.abc.androidTablet E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at com.phonegap.plugins.childBrowser.ChildBrowser.openExternal(ChildBrowser.java:127) at com.mygola.androidTablet.abc_android$1.shouldOverrideUrlLoading(abc_android.java:96) at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:270) at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:372) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method) 

Sin tu logcat es difícil darte más consejos usando el plugin pero si estás llamando openExternal desde la capa nativa no hay razón para usar el complemento. Si echa un vistazo al código fuente , verá todo lo que hace es tomar su url y cargarlo en una nueva página de DroidGap .

Si usted toma solamente la parte esencial que puede ayudar a rastrear donde está ocurriendo la excepción.

 function void openExternalUrl() { intent = new Intent().setClass(this.ctx.getContext(), org.apache.cordova.DroidGap.class); intent.setData(Uri.parse(url)); // This line will be removed in future. intent.putExtra("url", url); this.ctx.startActivity(intent); } 

EDITAR

Está obteniendo una excepción nula en la variable de contexto. No sé por qué es nulo en el momento, pero puede arreglar fácilmente que la modificación del método y pasar el contexto actual. Reemplace this.cordova con el contexto y usted debe estar bien. Llame a este de su actividad pasando this como el último parámetro (ex: childBrowser.openExternal("http://www.google.com", true,this)) .

 public String openExternal(String url, boolean usePhoneGap,Context context) { ... intent = new Intent().setClass(context, org.apache.cordova.DroidGap.class); ... context.startActivity(intent); } 

También para evitar errores de otras llamadas a esta función, agregue otro método con los parámetros originales:

 public String openExternal(String url, boolean usePhoneGap) { openExternal(url,usePhoneGap,this.cordova.getActivity()); } 

Al final, el código funcionó para mí …

 ChildBrowser childBrowser = new ChildBrowser(); childBrowser.cordova = this; childBrowser.showWebPage(url, null); 
  • PhoneGap plugin: la forma más rápida de transferir datos JSON a nativo
  • Inter-dispositivo de comunicación a través de Bluetooth con Phonegap en Android?
  • Captura de audio / video en PhoneGap / Córdoba utilizando un complemento de Java externo
  • Comunicación asíncrona entre Javascript y Phonegap Plugin
  • notificaciones push de Google Chrome android
  • cómo probar la notificación push en android phonegap?
  • Phonegap - ¿Cómo generar un archivo de imagen de cadena base64?
  • Cómo llamar a la función en el marco iónico + angularjs?
  • ¿Hay una alternativa a getUserMedia para Phonegap Android (local)?
  • Cookie no está siendo fijado con phonegap filetransfer upload Response
  • PhoneGap Build Notificación de empuje (Android)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.