我正在尝试向浏览器发送意图以打开本地文件。我希望使用默认浏览器打开此文件。
if(file.exists()){
Log.d(TAG, "file.exists");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
context.startActivity(intent);
}
但是它抛出了我和exeption
08-10 13:27:58.993: ERROR/AndroidRuntime(28453): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///sdcard/release_notes.htm }
如果我使用以下意图浏览器按预期打开google.com
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com"));
此外,当我将文件URL (file:///sdcard/release_notes.htm)
写入浏览器地址栏时,它会按预期打开它。
答案 0 :(得分:9)
仅针对HTML和其他兼容文件启动浏览器。这应该有效:
Intent intent = new Intent(ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "text/html");
答案 1 :(得分:6)
这对我有用。我直接从Android默认浏览器的Manifest.xml获取了mime类型。显然text / html mime仅适用于http(s)和内联方案。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setDataAndType(Uri.fromFile(filePath), "application/x-webarchive-xml");
startActivity(intent);
不确定它是否适用于所有Android /手机/浏览器组合,但这是我能让它工作的唯一方法。
编辑:使用chrome测试但无效。也不适用于我的2.3.3设备。似乎可以使用Android 4.0中的默认浏览器。
答案 2 :(得分:4)
您需要在意图中添加可浏览类别。
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
intent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(intent);
答案 3 :(得分:2)
这是一种更为强大的方法:
private void openInBrowser(File file) {
final Uri uri = Uri.fromFile(file);
try {
final Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
browserIntent.setData(uri);
startActivity(browserIntent);
} catch (ActivityNotFoundException e) {
final Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setDataAndType(Uri.fromFile(file), "text/html");
startActivity(browserIntent);
}
}
我在Nexus One(API 16,4.1.2)上进行了测试,其中try
正常工作,而Nexus 5(API 22,5.1.1)只有{{1}工作。
答案 4 :(得分:1)
也许这有效:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "text/html");
startActivity(intent);
答案 5 :(得分:0)
问题是新活动无法访问您应用内的html页面,因为它是一个不同的应用,并且没有权限这样做。
答案 6 :(得分:0)
此代码适用于API 10和API 11。
File f = new File("/mnt/sdcard/index.html");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setDataAndType(Uri.fromFile(f), "application/x-webarchive-xml");
// Have to add this one in order to work on Target 2.3.3 (API 10)
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
startActivity(intent);