Hen*_*ing 9 browser android exception android-activity
当我尝试在Android浏览器中打开本地HTML文件时,我遇到了一个奇怪的错误.发生的错误是未找到活动的异常:
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?
Run Code Online (Sandbox Code Playgroud)
对我来说真正奇怪的是,所有设备上都不会出现此错误.它只出现在以下设备上:
我已在以下设备上成功测试了我的代码:
最后这是我用来用Android浏览器打开我的HTML文件的代码.我已经测试了这些代码的几种排列,省略了一些行,但它们都具有相同的效果.一旦我设置组件或类我得到上述异常.
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);
Run Code Online (Sandbox Code Playgroud)
我也试过了
browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
Run Code Online (Sandbox Code Playgroud)
代替
browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
Run Code Online (Sandbox Code Playgroud)
但效果相同......
有人知道为什么会这样,我错过了什么吗?我已经搜索了几天,但找不到任何解决我问题的方法......
非常感谢,欢呼
use*_*305 14
可能因为可能没有像com.android.browser.BrowserActivity
这些设备那样的任何活动,它取决于设备制造商他们如何实现本机浏览器应用程序(活动名称和包名称).
所以可能的解决方案是,
使用PackageManger
和Intent
您可以检查特定的意图类别,Intent.CATEGORY_BROWSABLE
如果可用,可用于任何应用程序,然后将该应用程序设置为ComponentName.
或者,您没有指定组件名称,例如,
browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
Run Code Online (Sandbox Code Playgroud)
让用户必须选择,哪个Activity会打开这个页面,
所以只是代码,
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);
Run Code Online (Sandbox Code Playgroud)
在某些情况下你可能想要使用本机浏览器而不是让用户选择一个,这就是我通过不同的包名避免ActivityNotFoundException的方法,希望这会有所帮助:)
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);
}
}
Run Code Online (Sandbox Code Playgroud)