Webview android: come intercettare i link e aprire maps

Al momento stai visualizzando Webview android: come intercettare i link e aprire maps

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

Condividilo se ti è piaciuto