I am trying to load a twitter URL in browser.
In my phone, I have already installed twitter app also. I am trying to open URL using ACTION_VIEW
intent. But what happens is, when I call intent, android will show default chooser dialog, which contains twitter app also (if it is installed on device). I want to open the URL using browsers only. I want to exclude Twitter application from the dialog. I want all availaible browsers in device to show up in dialog, not native applications like twitter, facebook etc.
Is it is possible or not? If possible could anyone help me in achieving it. I am also attaching my code and a screenshot along with this question for clarity.
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);
I needed to do a similar thing and found this answer helpful. I've modified it so that it is a complete solution:
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();
}
}
You just need to set the target package to the intent:
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);
However, users my be disturbed if they have some custom browser installed and want to use this as default.
You can try to detect the default browser with:
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