Android Apri un URL in un browser

Esempio

Apertura con il browser predefinito

Questo esempio mostra come è possibile aprire un URL a livello di programmazione nel browser Web incorporato anziché all'interno dell'applicazione. Ciò consente all'app di aprire una pagina Web senza la necessità di includere l'autorizzazione INTERNET nel file manifest.

public void onBrowseClick(View v) {
    String url = "http://www.google.com";
    Uri uri = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    // Verify that the intent will resolve to an activity
    if (intent.resolveActivity(getPackageManager()) != null) {
        // Here we use an intent without a Chooser unlike the next example
        startActivity(intent);
    } 
}

Chiedere all'utente di selezionare un browser

Nota che questo esempio usa il metodo Intent.createChooser() :

public void onBrowseClick(View v) {
    String url = "http://www.google.com";
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    // Note the Chooser below. If no applications match, 
    // Android displays a system message.So here there is no need for try-catch.
    startActivity(Intent.createChooser(intent, "Browse with"));
   
}

In alcuni casi, l'URL può iniziare con "www" . In questo caso otterrai questa eccezione:

android.content.ActivityNotFoundException : Nessuna attività trovata per gestire Intento

L'URL deve sempre iniziare con "http: //" o "https: //" . Il tuo codice dovrebbe quindi controllarlo, come mostrato nel seguente frammento di codice:

if (!url.startsWith("https://") && !url.startsWith("http://")){
    url = "http://" + url;
}
Intent openUrlIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (openUrlIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(openUrlIntent);
} 

Migliori pratiche

Controlla se sul dispositivo non ci sono app che possono ricevere l'intento implicito. In caso contrario, la tua app si bloccherà quando chiama startActivity() . Per prima verificare che esista un'app per ricevere l'intento, chiama resolveActivity() sull'oggetto Intent. Se il risultato non è nullo, c'è almeno un'app in grado di gestire l'intento ed è sicuro chiamare startActivity() . Se il risultato è nullo, non si dovrebbe usare l'intento e, se possibile, si dovrebbe disabilitare la funzione che richiama l'intento.