2012-04-26 15 views
6

Ho un telefono Android con più browser installati e potrei o non potrei impostare un browser come predefinito.Apre il browser nativo da un'app per Android

Quindi, la mia domanda è ..

  1. Dal mio App, Come forzo aprire un collegamento solo nel NATIVE browser di Android?
  2. C'è un modo per sapere se è impostato un browser predefinito o no?

risposta

6

Dal mio App, Come forzo aprire un collegamento solo nel NATIVE Android browser?

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(); 
} 

C'è un modo per sapere se c'è un browser impostato non di default o?

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

Grande! questo funzionaGrazie Prabhu :) – defactodeity

+1

Il codice sopra riportato non è riuscito a identificare il browser predefinito. Sul mio dispositivo, ho impostato Opera come browser predefinito, ma quando eseguo questo codice, non vedo 'resolveInfo.isDefault' è sempre vero per qualsiasi browser! Per favore aiuto. – defactodeity

1

provare qualcosa di simile.

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(); 
     } 

per la seconda domanda è possibile utilizzare PackageManager.

ottenere istanza di PackageManager

PackageManager packageManager = getPackageManager(); 

e Query per azioni specifiche, i dati e la categoria di 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

Grazie mille @ N-JOY Il seguente codice ha risposto alla prima domanda. 'Intento ii = nuovo Intento(); 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); ' Per la seconda parte della domanda, ** C'è un modo per sapere se sul telefono è impostato un browser predefinito? ** – defactodeity

+0

Ho aggiornato la mia risposta per la seconda domanda. –

+0

Ho impostato un browser come predefinito ma 'resolveInfo.isDefault' non sembra funzionare. – defactodeity

1

infine capito. resolveActivity lavora con MATCH_DEFAULT_ONLY bandiera esempio PackageManager ..

4

si deve fare quanto segue per chiamare il browser nativo

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