webView.setWebViewClient(new WebViewClient(){
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Nullable
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
//如果有isCachePic属性
if(params.containsKey("isCachePic")) {
boolean isCachePic = (boolean) params.get("isCachePic");
Log.d(TAG, "shouldInterceptRequest:我有回调 " + isCachePic);
if(!isCachePic) {//如果不缓存,返回默认方式
return super.shouldInterceptRequest(view, request);
}
}
String picUrl = request.getUrl().toString();
String[] urls = picUrl.split("/");
if(urls.length > 1) {
String fileName = picUrl.split("/")[urls.length - 1];
String[] urlTypes = fileName.split("\\.");
if(urlTypes.length > 1) {
String urlType = urlTypes[urlTypes.length - 1];
if (isPic(urlType)) {//解析出对应类型,如果是图片,那 么判断本地有没有
if (context.getExternalFilesDir("") != null) {
File myPicFile = new File(context.getExternalFilesDir("").getAbsoluteFile() + "/pics/" + fileName);
if(myPicFile.exists()) {//如果文件存在,加载在网页
WebResourceResponse response = null;
try {
// 重新构造WebResourceResponse 将数据已流的方式传入
// 根据网络资源,找到本地资源的File
String micUlr = context.getExternalFilesDir("").getAbsoluteFile() + "/pics/" + fileName;
FileInputStream input = new FileInputStream(new File(micUlr));
response = new WebResourceResponse(MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(micUlr)), "UTF-8", input);
Log.d(TAG, "shouldInterceptRequest: 正常加载中");
} catch (Exception e) {
Log.d(TAG, "shouldInterceptRequest: 加载中遇到问题" + e);
return super.shouldInterceptRequest(view, request);
}
return response;
} else {//如果不存在就下载到本地
Log.d(TAG, "shouldInterceptRequest: 下载了图片");
PicSaveUtil.savePic(request.getUrl().toString(), context, PicSaveUtil.SAVE_PATH_TYPE_DATA, fileName);
}
} else {
return super.shouldInterceptRequest(view, request);
}
}
}
}
return super.shouldInterceptRequest(view, request);
}
});
WebView缓存图片到本地
最新推荐文章于 2024-07-25 14:07:09 发布