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
- Error de plugin de notificación de barra de estado con Cordova
- Cordova build - No se pudo resolver com.android.tools.build:gradle:1.5.0
- Crear un proyecto de teléfono que no esté llamado HelloWorld
- Cómo hacer que las aplicaciones de Android sean accesibles (para personas con discapacidades) con PhoneGap
- Andorid cordova phonegap config.xml prefijo sin conexión
- (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!
- Detectar la llamada entrante con la brecha telefónica
- ¿Existen buenos tutoriales de Phonegap excepto para "Hola"?
- No se puede registrar SIP con Twilio SDK
- Geolocalización de phonegap, código 3 - el tiempo de espera expirado sigue apareciendo en algunos dispositivos Android
- Agregar complementos de Cordova / Phonegap detrás de un proxy
- Android Build falló después de agregar Crosswalk a Ionic
- Creación de widgets de Android con el teléfono
- Android 4.0.3, window.openDatabase no funciona
@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
- Android estilo estándar lengüeta legalidad
- Cómo pasar una matriz de objetos de dirección a otra Acitvity