I'm encountering a strange error when I try to open a local HTML - file in the android browser. The error that occurs is an activity not found exception:
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.browser/com.android.browser.BrowserActivity}; have you declared this activity in your AndroidManifest.xml?
What's really strange to me ist the fact that this error does not occur on all devices. It only comes up on the following devices:
I have tested my Code successfully on the following devices:
Finally this is the Code I'm using to open my HTML - file with the Android - browser. I have tested several permutations of this code, leaving out some lines, but they do all have the same effect. As soon as I set component or class I getting the above exception.
Uri uri = Uri.parse(filePath);
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
browserIntent.setDataAndType(uri, "text/html");
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
context.startActivity(browserIntent);
I have also tried
browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
instead of
browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
But with the same effect...
Has someone an idea why this is happening, am I missing something? I have searched for days on this but couldn't find anything that solved my problem...
Thanks a lot in advance, cheers
Possible because may be there is no any activity like com.android.browser.BrowserActivity
in those devices, Its depends on device manufacturer How they implement the native Browser Application (Activity Name and Package name).
So the possible solution is,
Using PackageManger
and Intent
you can check for specific intent category like, Intent.CATEGORY_BROWSABLE
is available for any application if available then set that application to ComponentName.
Or, You don't specify component name, like,
browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
let user have to choose, which Activity will open this page,
So just code is,
Uri uri = Uri.parse(filePath);
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setDataAndType(uri, "text/html");
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
context.startActivity(browserIntent);
in some scenario you might want to use the native browser instead of letting user chose one, this is how I did to avoid ActivityNotFoundException by different package name, hope this would help :)
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
PackageManager packageManager = currentActivity.getPackageManager();
Uri uri = Uri.parse(url);
browserIntent.setDataAndType(uri, "text/html");
List<ResolveInfo> list = packageManager.queryIntentActivities(browserIntent, 0);
for (ResolveInfo resolveInfo : list) {
String activityName = resolveInfo.activityInfo.name;
if (activityName.contains("BrowserActivity")) {
browserIntent =
packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName);
ComponentName comp =
new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
browserIntent.setAction(Intent.ACTION_VIEW);
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
browserIntent.setComponent(comp);
browserIntent.setData(uri);
}
}
Why not leave it to the system to determine which app to use? If I have (for example) Chrome installed and perfer to use Chrome, I'll be a bit pissed that you forced the default browser on me.
This should work:
final Uri uri = Uri.parse(filePath);
Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri);
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
context.startActivity(browserIntent);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With