我的问题是我需要将项目中的 HTML 文件加载到浏览器中。
对于应用程序的详细信息,我不能:
- 复制 SD 卡中的资产,因为在需要读取文件时可以将其卸载。
- 在应用程序中使用 a
WebView
。它必须是浏览器。
到目前为止,我的方法是尝试使用ContentProvider
. 我一直在关注本教程。在这种方法中,我的主要问题是如何传递给浏览器Uri
并调用我的ContentProvider
.
我试图像这样向浏览器发送一个意图:
Uri uri = Uri.parse( "content://myprovider_authority/my_file.html" ):
intent.setData(uri);
startActivity(intent);
但是库存的 Android 浏览器不理解 URI,并尝试在 Google 中搜索 URI。
有谁知道我应该如何将它传递Uri
给浏览器,以便我收到一个请求ContentProvider
?
解决方案说明:
@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
的很简单,而且我使用了网络图像,所以这对我来说完全有用。
(不确定是否所有浏览器都支持数据方案)