我的问题是我需要将我项目中的HTML文件加载到浏览器中。将本地资源加载到浏览器中(而不是WebView)
对于应用程序的细节,我不能:
- 复制资产的SD卡,因为当文件需要读它可以被卸载。
- 在应用程序中使用
WebView
。它需要成为浏览器。
我到目前为止的做法是一直试图使用ContentProvider
。我一直在关注这个tutorial。在这种方法中,我的主要问题是如何传递给浏览器Uri
并接到我的ContentProvider
的呼叫。
我试图一个Intent发送到浏览器这样的:
Uri uri = Uri.parse("content://myprovider_authority/my_file.html"):
intent.setData(uri);
startActivity(intent);
但股价Android浏览器不理解的URI,并尝试搜索的URI在谷歌。
有谁知道我应该如何通过这Uri
到浏览器,所以我收到我的ContentProvider
请求?
SOLUTION解释说:
@gimix解决方案为我即使方法是不使用ContentProvider
。我更多地解释一下。
他建议将数据URI
方案发送到浏览器。这意味着将我们的本地HTML
资产文件编码为Base64
并使用Intent
传递它。浏览器将解释该数据并呈现结果。一些代码将有助于了解它:
String html = "";
try {
InputStream is = mContext.getAssets().open("my_file.html");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
html = new String(buffer);
}
catch (IOException e) {
e.printStackTrace();
}
intent.setData(Uri.parse("data:text/html;charset=utf-8;base64," + Base64.encodeToString(html.getBytes(), Base64.NO_WRAP)));
startActivity(intent);
这里的棘手的事情是HTML
内的图像。对于那些有两种选择的人来说,对这些图像进行编码并将实际编码置于HTML
编码中,或者参考Web图像(因此您不需要执行任何其他编码)。
我的HTML
很简单,我使用网络图像,所以这完全为我工作。
(不知道是否所有的浏览器支持,虽然数据计划)