最近项目由于需要支持gif动图,所以把图片加载框架由ImageLoader
切换到glide
,因为需要支持长按保存图片,所以就需要找到glide
加载后缓存的图片路径。
根据网上资料,最终找到Glide
最终生成path的路径为:/data/data/your_packagexxxxxxx/cache/image_manager_disk_cache
对应的生成规则:com.bumptech.glide.load.engine.EngineKey#updateDiskCacheKey
问题转换为:获取url到缓存文件path的生成规则算法上
直接把获取函数贴出来:
Glide 3.+版本
/**
* Glide缓存存储路径:/data/data/your_packagexxxxxxx/cache/image_manager_disk_cache
* Glide文件名生成规则函数 : 3.0+ 版本
*
* @param url 传入您的图片地址url
* @param width 设备屏幕分辨率的宽度 eg : 1080
* @param height 设备屏幕分辨率的高度 eg : 1920
* @return
* @autor 胖虎 https://blog.csdn.net/ljphhj
*/
private String getGlide3_SafeKey(String url, int width, int height) {
byte[] dimensions = ByteBuffer.allocate(8)
.putInt(width)
.putInt(height)
.array();
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
EmptySignature signature = EmptySignature.obtain();
signature.updateDiskCacheKey(messageDigest);
messageDigest.update(url.getBytes(STRING_CHARSET_NAME));
messageDigest.update(dimensions);
messageDigest.update("".getBytes(STRING_CHARSET_NAME));
messageDigest.update("ImageVideoBitmapDecoder.com.bumptech.glide.load.resource.bitmap".getBytes(STRING_CHARSET_NAME));
messageDigest.update("FitCenter.com.bumptech.glide.load.resource.bitmap".getBytes(STRING_CHARSET_NAME));
messageDigest.update("BitmapEncoder.com.bumptech.glide.load.resource.bitmap".getBytes(STRING_CHARSET_NAME));
messageDigest.update("".getBytes(STRING_CHARSET_NAME));
String safeKey = Util.sha256BytesToHex(messageDigest.digest());
return safeKey + ".0";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
Glide 4.+版本
/**
* Glide缓存存储路径:/data/data/your_packagexxxxxxx/cache/image_manager_disk_cache
* Glide文件名生成规则函数 : 4.0+ 版本
*
* @param url 图片地址url
* @return 返回图片在磁盘缓存的key值
*/
private static String getGlide4_SafeKey(String url) {
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
EmptySignature signature = EmptySignature.obtain();
signature.updateDiskCacheKey(messageDigest);
new GlideUrl(url).updateDiskCacheKey(messageDigest);
String safeKey = Util.sha256BytesToHex(messageDigest.digest());
return safeKey + ".0";
} catch (Exception e) {
}
return null;
}
网友评论