最近自己做了一个app涉及到分享图片以及gif文件,查看过多个框架最终决定使用Facebook的fresco框架,功能很强大,具体可以看git链接https://github.com/desmond1121/Fresco-Source-Analysis。关于Fresco的说明不多说,这里主要说一下获取本地缓存:
我们如果适用QQ分享的话,会发现需要我们传入一个本地图片的url,使用Fresco初始化的时候设置本地缓存规则:
DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder()
.setBaseDirectoryPath(Environment.getExternalStorageDirectory().getAbsoluteFile())
.setBaseDirectoryName(Constants.CACHE_DIRECTORY)
.setMaxCacheSize(100 * ByteConstants.MB)
.setMaxCacheSizeOnLowDiskSpace(50 * ByteConstants.MB)
.setMaxCacheSizeOnVeryLowDiskSpace(30 * ByteConstants.MB).build();
会自动在手机本地或者SD卡生成缓存文件夹,并且会设置最大缓存空间然后我们就可以根据CacheKey来获取缓存文件路劲,从而实现分享,具体代码:
imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url)).build();
CacheKey cacheKey= DefaultCacheKeyFactory.getInstance()
.getEncodedCacheKey(imageRequest);
BinaryResource resource = ImagePipelineFactory.getInstance()
.getMainDiskStorageCache().getResource(cacheKey);
final File file=((FileBinaryResource)resource).getFile();
这里获取的是File,至于File如何获取uri就很easy了(file.toURI())。