将网页保存为离线mht文件,没有找到第三方开源库,网上的例子:
http://blog.csdn.net/dongle2001/article/details/2557434
http://blog.sina.com.cn/s/blog_3fd24f6c0100ig2r.html
当然要想编译通过可能还需要相关的jar包,可以搜到,保存的mht文件格式会有问题,但是目前有问题编码格式有问题,而且有些资源下载不到.
后面使用了下uc和apus的离线保存功能,保存的文件打开研究了下,和上面的具体实现不一样,他们产生的mht文件的from源长得有点奇怪,并不是邮箱,而是
<Saved by Blink>
或
<Saved by WebKit>
直觉告诉我,可能是使用其他的开源库或者是原生webKit中的api,然后就各种找,后面发现了这个贴子:
https://lists.webkit.org/pipermail/webkit-gtk/2014-January/001772.html
然后就开始找api,最后在WebView中发现了
/**
* Saves the current view as a web archive.
*
* @param filename the filename where the archive should be placed
*/
public void saveWebArchive(String filename) {
checkThread();
mProvider.saveWebArchive(filename);
}
后面WebViewClient尝试在onPageFinished后调用下面的逻辑
File file = new File(Environment.getExternalStorageDirectory(),"demo.mht");
webView.saveWebArchive(file.getAbsolutePath());
通过es浏览器查看新生成的文件,果断就有一个demo.mht.而且打开查看内容From就是
<Saved by Blink>
所以网页离线保存的关键就是使用webview的saveWebArchive方法.结果就这么简单.
坑点
Kitkat and above 保存方式为原生mht,支持file协议,可以直接访问.而低于Kitkat则保存成功,打开则需要通过io将文件转化为String,然后通过loadDataWithBaseURL方法加载.具体参考下面的贴子.
http://stackoverflow.com/questions/17484115/save-webpage-for-offline-use-and-invoke-the-same-android/40882679#40882679
saveWebArchive 支持版本为api level 11及以上