¿Cómo puedo abrir una URL en el navegador web de Android desde mi aplicación?
¿Cómo abrir una URL desde el código en el navegador web integrado en lugar de dentro de mi aplicación?
Probé esto:
try {
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(download_link));
startActivity(myIntent);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "No application can handle this request."
+ " Please install a webbrowser", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
pero obtuve una excepción:
No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com
Prueba esto:
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);
Eso funciona bien para mí.
En cuanto al "http://" que falta, simplemente haría algo como esto:
if (!url.startsWith("http://") && !url.startsWith("https://"))
url = "http://" + url;
Probablemente también rellenaría previamente su EditText en el que el usuario está escribiendo una URL con "http://".
En Kotlin:
if (!url.startsWith("http://") && !url.startsWith("https://")) {
url = "http://$url"
}
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(browserIntent)
Una forma común de lograr esto es con el siguiente código:
String url = "http://www.stackoverflow.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
eso podría cambiarse a una versión de código corto...
Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://www.stackoverflow.com"));
startActivity(intent);
o :
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com"));
startActivity(intent);
¡el más corto! :
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com")));
Respuesta sencilla
Puedes ver la muestra oficial de Android Developer .
/**
* Open a web page of a specified URL
*
* @param url URL to open
*/
public void openWebPage(String url) {
Uri webpage = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
Cómo funciona
Eche un vistazo al constructor de Intent
:
public Intent (String action, Uri uri)
Puede pasar android.net.Uri
la instancia al segundo parámetro y se crea una nueva intención basada en la URL de datos proporcionada.
Y luego, simplemente llame startActivity(Intent intent)
para iniciar una nueva Actividad, que se incluye con el Intent con la URL proporcionada.
¿ Necesito el if
estado de cuenta del cheque?
Sí. Los documentos dicen:
Si no hay aplicaciones en el dispositivo que puedan recibir la intención implícita, su aplicación fallará cuando llame a startActivity(). Para verificar primero que existe una aplicación para recibir la intención, llame a resolveActivity() en su objeto Intent. Si el resultado no es nulo, hay al menos una aplicación que puede manejar la intención y es seguro llamar a startActivity(). Si el resultado es nulo, no debe utilizar la intención y, si es posible, debe deshabilitar la función que invoca la intención.
Prima
Puede escribir en una línea al crear la instancia de Intent como se muestra a continuación:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));