2012-04-26 23 views
6

Tengo un teléfono Android con múltiples navegadores instalados y podría o no configurar un navegador como predeterminado.Abra el navegador nativo desde una aplicación de Android

Por lo tanto, mi pregunta es ..

  1. Desde mi aplicación, ¿Cómo fuerzo abrir un enlace sólo en el NATIVO navegador de Android?
  2. ¿Hay alguna manera de saber si hay un navegador configurado como predeterminado o no?

Respuesta

6

Desde mi aplicación, ¿Cómo fuerzo abrir un enlace sólo en el nativo navegador de Android?

Intent intent = new Intent(); 
ComponentName comp = new ComponentName("com.google.android.browser","com.google.android.browser.BrowserActivity"); 
intent.setComponent(comp); 
intent.setAction("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.BROWSABLE"); 
Uri uri = Uri.parse(url); 
intent.setData(uri); 
try 
{ 
    startActivity(intent); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

¿Hay alguna manera de saber si hay un navegador definido como predeterminado o no?

PackageManager packageManager = getPackageManager(); 

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.parse("URL")); 

List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 0); 

if (list.size() > 0) { 
    for (ResolveInfo resolveInfo : list) { 
     resolveInfo.isDefault();// will let u know if the app is set to default 
    } 

} else { 
    //No apps available 
} 
+0

¡Genial! esto funciona.Gracias Prabhu :) – defactodeity

+1

El código anterior no ha podido identificar el navegador predeterminado. En mi dispositivo, configuré Opera como navegador predeterminado, pero cuando ejecuto este código, no veo 'resolveInfo.isDefault' que sea cierto para ningún navegador. Por favor ayuda. – defactodeity

1

prueba algo como esto.

try { 
     Intent i = new Intent(); 
     ComponentName comp = new ComponentName("com.google.android.browser","com.google.android.browser.BrowserActivity"); 
     i.setComponent(comp); 
     i.setAction("android.intent.action.VIEW"); 
     i.addCategory("android.intent.category.BROWSABLE"); 
     ContentURI uri = new ContentURI(url); 
     i.setData(uri); 
     startActivityForResult(i, 2); 
     } catch (URISyntaxException e) { 
         e.printStackTrace(); 
     } 

para su segunda pregunta puede usar PackageManager.

conseguir instancia de PackageManager

PackageManager packageManager = getPackageManager(); 

y Query para una acción específica, los datos y la categoría de Intent.

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.parse("URL")); 

List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 0); 

    for (ResolveInfo resolveInfo : list) { 

     if(resolveInfo.isDefault()) 
     { 
     //default browser 
     } 
    } 
+0

Gracias. 'Intención ii = nueva intención(); ComponentName comp = new ComponentName ("com.android.browser", "com.android.browser.BrowserActivity"); ii.setComponent (comp); ii.setAction ("android.intent.action.VIEW"); ii.addCategory ("android.intent.category.BROWSABLE"); ii.setData (Uri.parse ("http://www.google.com")); startActivity (ii); ' Para la segunda parte de la pregunta, ** ¿Hay alguna manera de saber si hay un navegador predeterminado configurado en el teléfono? ** – defactodeity

+0

He actualizado mi respuesta para su segunda pregunta. –

+0

He configurado un navegador como predeterminado pero 'resolveInfo.isDefault' no parece funcionar. – defactodeity

1

Finalmente lo descubrió. resolveActivity trabaja con la bandera MATCH_DEFAULT_ONLY en la instancia PackageManager ..

4

usted tiene que hacer lo siguiente para llamar al navegador nativo

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

que podría ocurrir ActivityNotFoundException mientras que el nombre del paquete es diferente según el fabricante. Por favor, consulte esta respuesta, desearía que lo ayudara. un montón @ N-JOY El siguiente código contestó la primera pregunta

https://stackoverflow.com/a/14723703/1083128

Cuestiones relacionadas