1.使用Gilde得到缓存路径
/**
* 获取Gilde加载gif图片缓存路径
* @param imgUrl 需要下载gif图片url
* @param context 上下文
* @return
*/
private static String getImagePath(String imgUrl, Context context) {
String path = null;
FutureTarget<File> future = Glide.with(context)
.load(imgUrl)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
try {
File cacheFile = future.get();
path = cacheFile.getAbsolutePath();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return path;
}
2.保存图片
/**
* 以流形式保存gif图片
* @param oldPath 缓存路径
* @param newPath 需要保存的路径
*/
public static void copyFile(String oldPath, final String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件存在时
InputStream inStream = new FileInputStream(oldPath); //读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
3.使用并通知图库更新
//保存gif类型图片
public static void saveGif(final String imgUrl, final Context context, final String finalImagePath) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
String path = getImagePath(imgUrl, context);
copyFile(path, finalImagePath);
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// 把文件插入到系统图库
try {
MediaStore.Images.Media.insertImage(context.getContentResolver(), finalImagePath, "", "");
} catch (Exception e) {
e.printStackTrace();
}
// 通知图库更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + finalImagePath)));
ToastUtil.showRaw("图片下载成功");
}
}.execute();
}