2010-07-25 13 views
9

Quiero ejecutar específicamente el navegador Android predeterminado para una URL determinada. Estoy usando este código:Iniciar el navegador con clase personalizada: no se puede encontrar la actividad

Intent i = new Intent(); 
i.setAction("android.intent.action.VIEW"); 
i.addCategory("android.intent.category.BROWSABLE"); 
i.setClassName("com.google.android.browser", "com.android.browser.BrowserActivity"); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.setData(Uri.parse(url)); 
startActivity(i); 

El error que recibo es:

Unable to find explicit activity class { 
com.google.android.browser/com.android.browser.BrowserActivity}; 
have you declared this activity in your AndroidManifest.xml? 

También probé el filtrado de los intentos por el paquete:

i.setPackage("com.google.android.browser"); 

en lugar de setClassName, pero a en vano:

No Activity found to handle Intent { act=android.intent.action.VIEW 
cat=[android.intent.category.BROWSABLE] 
dat=http://www.google.com/ flg=0x10000000 pkg=android } 

También traté de agregar <uses-library android:name="com.google.android.browser" /> al manifiesto.

¿Falta algo aquí?

PD: No estoy interesado en usar startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"))), ya que mostrará una lista de todas las opciones para la exploración Intent.

Respuesta

6

yo uso esto, está bien.

intent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity")); 

creo que sabes lo que está mal. :)

6

Tenga en cuenta que el navegador predeterminado puede anularse y no siempre es la aplicación integrada del navegador, puede ser, por ejemplo, Opera Mini.

que tiene que hacer de esta manera:

Intent intent = new Intent(Intent.ACTION_VIEW); 
Uri data = Uri.parse("http://www.google.com"); 
intent.setData(data); 
startActivity(intent); 
+4

Como lo indiqué en mi pregunta, quiero poder ejecutar el * navegador Android * predeterminado, no el * explorador seleccionado * predeterminado. Como nodo lateral, primero probé con la solución que mencionas, pero fue en vano ya que obviamente inicia el navegador que está configurado como predeterminado (o inicia el selector de aplicaciones). –

+0

cómo usar esta intención en una clase de no actividad? – Maxwell

+0

El inconveniente de esto: para los archivos html locales, lanza la aplicación HTMLViewer en lugar del navegador. – JustAMartin

1

Una forma de abrir una URL en un navegador de código es utilizar una vista web.

Crear una WebViewClientClass que se extiende la WebViewClient como:

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    view.loadUrl(url); 
    return true; 
} 

A continuación, cree una vista web. Set webview.setWebViewClient(new WebViewClientClass()); --- esta es una pequeña solución para que el navegador web predeterminado no se haga cargo.

luego tomar la dirección URL en un EditarTexto y la pusieron a cargar el navegador como:

webview.loadurl(urlfield.getText().toString()); 
webview.requestFocus(); 

Esto debería cargar el navegador web con la URL que ha solicitado.

Espero que esto ayude ... :)

+0

No configure webview.setWebViewClient si desea que su navegador web predeterminado se encargue de su solicitud ... – Flash

+1

No deseo iniciar una ventana del navegador (o para ese asunto use * my own * browser). Quiero iniciar el * navegador predeterminado que viene con Android *.Además, al iniciar una ventana del navegador se introduciría una complejidad adicional, como administrar la memoria caché, los marcadores, el botón Atrás, etc., etc. Por cierto, formatee su código;) –

Cuestiones relacionadas