package com.hotbitmapgg.moequest.utils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.Target;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.concurrent.ExecutionException;
import rx.Observable;
import rx.Subscriber;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
/**
* 使用Glide下载图片到本地工具类
*/
public class GlideDownloadImageUtil {
public static Observable<Uri> saveImageToLocal(final Context context, final String url) {
return Observable.create(new Observable.OnSubscribe<File>() {
@Override
public void call(Subscriber<? super File> subscriber) {
File file;
try {
LogUtil.all("download" + url);
file = Glide.with(context)
.load(url)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.get();
subscriber.onNext(file);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}).flatMap(new Func1<File, Observable<Uri>>() {
@Override
public Observable<Uri> call(File file) {
File mFile = null;
try {
String path = Environment.getExternalStorageDirectory() + File.separator +
ConstantUtil.FILE_DIR;
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}
String fileName = System.currentTimeMillis() + ".jpg";
mFile = new File(dir, fileName);
FileInputStream fis = new FileInputStream(file.getAbsolutePath());
int byteread;
byte[] buf = new byte[1444];
FileOutputStream fos = new FileOutputStream(mFile.getAbsolutePath());
while ((byteread = fis.read(buf)) != -1) {
fos.write(buf, 0, byteread);
}
fos.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
LogUtil.all("图片下载失败");
}
//更新本地图库
Uri uri = Uri.fromFile(mFile);
Intent mIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
context.sendBroadcast(mIntent);
return Observable.just(uri);
}
}).subscribeOn(Schedulers.io());
}
}