2013-09-08 11 views
8

Sto provando a caricare un URL di twitter nel browser.Come escludere un'applicazione specifica dall'intento ACTION_VIEW?

Nel mio telefono, ho già installato anche l'app di Twitter. Sto tentando di aprire l'URL utilizzando l'intento ACTION_VIEW. Ma quello che succede è, quando chiamo intento, Android mostrerà la finestra di dialogo selettore di default, che contiene anche l'app di Twitter (se è installata sul dispositivo). Voglio aprire l'URL utilizzando solo i browser. Desidero escludere l'applicazione Twitter dalla finestra di dialogo. Voglio che tutti i browser disponibili nel dispositivo vengano visualizzati nel dialogo, non applicazioni native come Twitter, Facebook, ecc.

È possibile o no? Se possibile, qualcuno potrebbe aiutarmi a raggiungerlo. Allego anche il mio codice e uno screenshot insieme a questa domanda per chiarezza.

String url = "https://twitter.com"; 
MimeTypeMap map = MimeTypeMap.getSingleton(); 
String type = map.getMimeTypeFromExtension(url); 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setType(type); 
i.setData(Uri.parse(url)); 
startActivity(i); 

enter image description here

risposta

3

Hai solo bisogno di impostare il pacchetto di destinazione per l'intento:

String url = "https://twitter.com"; 
MimeTypeMap map = MimeTypeMap.getSingleton(); 
String type = map.getMimeTypeFromExtension(url); 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setType(type); 
i.setData(Uri.parse(url)); 
ComponentName comp = new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"); 
i.setComponent(comp); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Tuttavia, gli utenti il ​​mio essere disturbati se hanno qualche browser personalizzato installato e vogliono usare questo come predefinito.

Si può provare a rilevare il browser predefinito con:

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://example.com")); 
List<ResolveInfo> list = context.getPackageManager() 
    .queryIntentActivities(i, 0); 
// walk through list and select your most favorite browser 
+0

nessuna differenza, tuttavia mostra la stessa vista. Ho apportato una piccola modifica al tuo codice. non so se sia necessario o meno. Questo mostra quasi tutta l'apllication nel mio dispositivo. –

+0

qui è il codice modificato. Ho commentato l'impostazione di dati e tipo. String url = "https://twitter.com"; MimeTypeMap map = MimeTypeMap.getSingleton(); String type = map.getMimeTypeFromExtension (url); \t \t Intenzione i = nuovo Intent (Intent.ACTION_VIEW); \t \t //i.setType(type); \t \t //i.setData(Uri.parse(url)); \t \t // ComponentName comp = new ComponentName ("com.android.browser", "com.android.browser.BrowserActivity"); \t \t ComponentName comp = new Intent (tipo, Uri.parse (url)). ResolveActivity (this. GetPackageManager()); \t \t i.setComponent (comp); \t \t i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); \t \t startActivity (i); –

+0

beh, il tuo codice non funzionerà. prova il mio prima. – flx

9

avevo bisogno di fare una cosa simile e ha trovato this risposta utile. L'ho modificato in modo che sia una soluzione completa:

public static void openFileWithInstalledAppExceptCurrentApp(File file, final Activity activity) { 
    Intent intent = new Intent(); 
    intent.setAction(android.content.Intent.ACTION_VIEW); 
    MimeTypeMap mime = MimeTypeMap.getSingleton(); 
    String ext = file.getName().substring(file.getName().indexOf(".")+1); 
    String type = mime.getMimeTypeFromExtension(ext); 
    intent.setDataAndType(Uri.fromFile(file),type); 
    PackageManager packageManager = activity.getPackageManager(); 
    List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); 
    String packageNameToHide = "com.test.app"; 
    ArrayList<Intent> targetIntents = new ArrayList<Intent>(); 
    for (ResolveInfo currentInfo : activities) { 
      String packageName = currentInfo.activityInfo.packageName; 
     if (!packageNameToHide.equals(packageName)) { 
      Intent targetIntent = new Intent(android.content.Intent.ACTION_VIEW); 
      targetIntent.setDataAndType(Uri.fromFile(file),type); 
      targetIntent.setPackage(packageName); 
      targetIntents.add(targetIntent); 
     } 
    } 
    if(targetIntents.size() > 0) { 
     Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), "Open file with"); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[] {})); 
     activity.startActivity(chooserIntent); 
    } 
    else { 
     Toast.makeText(this, "No app found", Toast.LENGTH_SHORT).show(); 
    } 
} 
+2

Hai dimenticato un '!' Prima di 'packageNameToHide.equals (packageName)'. Ora si apre sempre con packageNameOfAppToHide. – Roel

+0

@DalvikVM grazie per il suggerimento. Entrambi state scrivendo. Ho riparato l'errore. :) – Sufian

+0

@ lf215 scusa se la tua modifica è già stata rifiutata prima che potessi approvarla. Ho fatto la correzione. Grazie. :) – Sufian

Problemi correlati