Durante l’ultimo progetto sviluppato per una app android, ho utilizzato il componente WebView di android per visualizzare un mini sito responsive situato su un server proprietario che interrogasse un database e riportasse di seguito dei dati.
Tra le tante funzionalità, tra cui anche quella della ricerca vocale, inserimento , modifica, cancellazione, questo sito conteneva un campo con link che puntavano direttamente a Google Maps.
L’obiettivo era quello di fornire a chi stesse utilizzando l’applicazione la possibilità di poter avviare la navigazione in auto , senza dover uscire e rientrare più volte nell’applicazione con un dispendio di tempo notevole.
La visualizzazione di Maps sulla webview avveniva regolarmente , puntando anche all’indirizzo che mi interessava ma quando l’utente provava a cliccare sul tasto “navigazione” per avviare appunto il navigatore verso la località scelta l’app restituiva un errore :
ERR_UNKNOWN_URL_SCHEME
Una delle specifiche richieste nell’applicazione era proprio quello di avere la possibilità per gli utilizzatori di poter restare all’interno dell’applicazione e di avviare il navigatore direttamente da un indirizzo fornito.
Cercando un po in rete e leggendo un po di documentazione , la soluzione è arrivata attraverso la possibilità di poter intercettare i link e gestirli in modo da poter svolgere un’azione.
Questa possibilità è particolarmente importante perchè permette di poter applicare un controllo preciso e di poter gestire meglio l’applicazione.
Nel frammento di codice in java è descritto il funzionamento , ovvero , ogni volta che l’utente clicca su un link e viene caricata una nuova pagina , l’app intercetta questo link attraverso la funzione geturl() e nel caso contenga la parola “maps” apre direttamente l’app maps di google sullo smartphone dell’utilizzatore.
Sperando che questo frammento di codice possa essere d’aiuto a chiunque come me si sia trovato nella stessa problematica, oppure essere di spunto nel migliorarne la funzionalità o espanderle , ecco la soluzione adottata da me per la risoluzione della problematica :
WebView browser; ...... browser.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { if (browser.getUrl().contains("maps")) { //se l'indirizzo contiene la parola "maps" allora: String indirizzo = browser.getUrl(); // prendo l'indirizzo e lo inserisco in una stringa String indirizzo2 = indirizzo.replaceAll("https://maps.google.com/?q=","?"); // taglio la parte relativa all'indirizzo per prendere solo Via e Città Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps" + indirizzo2)); intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"); startActivity(intent); } if (progress < 100) { progressDialog.show(); } if (progress == 100) { progressDialog.dismiss(); } } }); }
Hai bisogno di aiuto o vuoi sviluppare la tua app o il tuo sito web ?
Contattami