Android + PhoneGap interceptar URL (equivalente a iOS shouldStartLoadWithRequest)

Mi aplicación de Sencha Touch de PhoneGap envuelta, alojada localmente hace algunas devoluciones de llamada de URL falsas para comunicarse con el contenedor nativo. (Es decir, app_callback://do_function_a ).

En iOS implemento lo siguiente

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 

Compruebe las URLs de app_callback:// , llame a una función nativa y devuelva NO (para detener la navegación).

¿Hay un equivalente en Android que puedo implementar?

¡Gracias por adelantado!

 @Override public void onCreate(Bundle savedInstanceState) { super.setBooleanProperty("showTitle", true); super.onCreate(savedInstanceState); //creates super.appView and calls setContentView(root) in DroidGap.java init(); this.appView.clearCache(true); this.appView.clearHistory(); this.appView.setWebViewClient(new CordovaWebViewClient(this, this.appView) { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { Log.d("DEBUG", "Should intercept request" +url); //Implement your code return super.shouldInterceptRequest(view, url); } @Override public void onLoadResource(WebView view, String url) { Log.d("DEBUG", "onLoadResource" +url); //Implement your code super.onLoadResource(view, url); } @Override public void onPageFinished(WebView view, String url) { Log.d("DEBUG", "On page finished "+url); //Implement your code super.onPageFinished(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.d("DEBUG", "should override url loading "+url); //Implement your code return super.shouldOverrideUrlLoading(view, url); } });super.loadUrl("file:///android_asset/www/index.html");} 

Esto es para versiones de API 9-17 Importante también es add onLoadResource

 public class MainActivity extends DroidGap { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setIntegerProperty("loadUrlTimeoutValue", 60000); this.init(); this.appView.clearCache(true); this.appView.clearHistory(); this.appView.setWebViewClient(new CordovaWebViewClient(this, this.appView) { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(url.contains("app://")) { url = url.replace("app://", ""); Log.d("DEBUG", url); // DO STUFF return true; } else { //view.loadUrl(url); return super.shouldOverrideUrlLoading(view, url); } } }); super.loadUrl("file:///android_asset/www/index.html"); } } 

Sí, shouldOverrideUrlLoading de WebViewClient .

Dado que este es el primer resultado de búsqueda que aparece para "phonegap android interceptar url" y tuve el mismo problema, pensé en añadir una respuesta más actualizada. Buscaba lanzar el marcador usando una URL como "tel: 01234567890". En iOS he utilizado el shouldStartLoadWithRequest, que funciona muy bien. En Android que necesitaba para encontrar una alternativa, y resulta que la última PhoneGap tiene una característica para que construido en.

En el archivo config.xml puede y debe definir los orígenes de acceso, para indicar qué patrones de URL están bien para trabajar en su aplicación. Se trata de una característica de seguridad, pero también puede especificar patrones de URL que se activarán en aplicaciones externas. Por ejemplo, si su aplicación hace las solicitudes de JSON a yourdomain.com entonces quizás tenga entradas como esta:

 <access origin="http://www.yourdomain.com/*" /> <access origin="https://www.yourdomain.com/*" /> <access origin="tel:*" launch-external="yes" /> <access origin="http:*" launch-external="yes" /> <access origin="https:*" launch-external="yes" /> 

Cuando se visita una URL en WebView, Cordova verificará en primer lugar si alguna de las reglas internas coincide y, a continuación, compruebe si alguna de las reglas externas coincide. Si ninguna de las reglas internas coincide, pero una de las reglas externas coincide, la URL se inicia en un intento.

Que funcionó muy bien para mí, pero si usted está necesitando algo más personalizado, encontré que el código para procesar esto está en CordovaUriHelper.java, en la función shouldOverrideUrlLoading. Así que si quería personalizar un poco, podría hacer cualquier cosa.

En realidad shouldOverrideUrl carga no es probable que funcione. Por el contrario, para android con SDK> = 11 debe utilizar shouldInterceptRequest.

Webview shouldinterceptrequest ejemplo

  • Phonegap Cordova - Barra de estado negra en la parte inferior después de la pantalla completa
  • Cordova Push Plugin: onNotificationGMC no se activa y no se puede obtener regID
  • android phonegap cordova webview eventos
  • HTML5 SQLite vs Base de datos nativa en caso de PhoneGap
  • ¿Cómo tener la funcionalidad de búsqueda en android usando phonegap?
  • Cordova / android compila el error con el paso de peatones
  • No se puede leer la propiedad 'getPicture' de undefined - cámara iónica
  • ¿Es posible cargar / crear bases de datos en sdcard usando phoneGap en Android?
  • Ionic - Splash Screen funciona para iOS pero no para Android
  • ¿Qué diferencia hay entre intel xdk, appmobi y crosswalk?
  • Error Phonegap - "No se encontró metaetiqueta Content-Security-Policy. Agregue uno cuando utilice el complemento cordova-plugin-whitelist. "
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.