不废话,直接上代码
[java] view plain copy print ? import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import com.baguanv.jinba.utils.Const; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.Target; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * 图片下载 * */ public class DownLoadImageService implements Runnable { private String url; private Context context; private ImageDownLoadCallBack callBack; private File currentFile; public DownLoadImageService(Context context, String url, ImageDownLoadCallBack callBack) { this.url = url; this.callBack = callBack; this.context = context; } @Override public void run() { File file = null; Bitmap bitmap = null; try { // file = Glide.with(context) // .load(url) // .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) // .get(); bitmap = Glide.with(context) .load(url) .asBitmap() .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) .get(); if (bitmap != null){ // 在这里执行图片保存方法 saveImageToGallery(context,bitmap); } } catch (Exception e) { e.printStackTrace(); } finally { // if (file != null) { // callBack.onDownLoadSuccess(file); // } else { // callBack.onDownLoadFailed(); // } if (bitmap != null && currentFile.exists()) { callBack.onDownLoadSuccess(bitmap); } else { callBack.onDownLoadFailed(); } } } public void saveImageToGallery(Context context, Bitmap bmp) { // 首先保存图片 String File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsoluteFile();//注意小米手机必须这样获得public绝对路径 String fileName = ”新建文件夹”; File appDir = new File(file ,fileName); if (!appDir.exists()) { appDir.mkdirs(); } String fileName = System.currentTimeMillis() + ”.jpg”; currentFile = new File(appDir, fileName); FileOutputStream fos = null; try { fos = new FileOutputStream(currentFile); bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } // 其次把文件插入到系统图库 // try { // MediaStore.Images.Media.insertImage(context.getContentResolver(), // currentFile.getAbsolutePath(), fileName, null); // } catch (FileNotFoundException e) { // e.printStackTrace(); // } // 最后通知图库更新 context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(currentFile.getPath())))); } } import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import com.baguanv.jinba.utils.Const; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.Target; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * 图片下载 * */ public class DownLoadImageService implements Runnable { private String url; private Context context; private ImageDownLoadCallBack callBack; private File currentFile; public DownLoadImageService(Context context, String url, ImageDownLoadCallBack callBack) { this.url = url; this.callBack = callBack; this.context = context; } @Override public void run() { File file = null; Bitmap bitmap = null; try { // file = Glide.with(context) // .load(url) // .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) // .get(); bitmap = Glide.with(context) .load(url) .asBitmap() .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) .get(); if (bitmap != null){ // 在这里执行图片保存方法 saveImageToGallery(context,bitmap); } } catch (Exception e) { e.printStackTrace(); } finally { // if (file != null) { // callBack.onDownLoadSuccess(file); // } else { // callBack.onDownLoadFailed(); // } if (bitmap != null && currentFile.exists()) { callBack.onDownLoadSuccess(bitmap); } else { callBack.onDownLoadFailed(); } } } public void saveImageToGallery(Context context, Bitmap bmp) { // 首先保存图片 String File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsoluteFile();//注意小米手机必须这样获得public绝对路径 String fileName = "新建文件夹"; File appDir = new File(file ,fileName); if (!appDir.exists()) { appDir.mkdirs(); } String fileName = System.currentTimeMillis() + ".jpg"; currentFile = new File(appDir, fileName); FileOutputStream fos = null; try { fos = new FileOutputStream(currentFile); bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } // 其次把文件插入到系统图库 // try { // MediaStore.Images.Media.insertImage(context.getContentResolver(), // currentFile.getAbsolutePath(), fileName, null); // } catch (FileNotFoundException e) { // e.printStackTrace(); // } // 最后通知图库更新 context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(currentFile.getPath())))); } } [java] view plain copy print ? public interface ImageDownLoadCallBack { void onDownLoadSuccess(File file); void onDownLoadSuccess(Bitmap bitmap); void onDownLoadFailed(); } public interface ImageDownLoadCallBack { void onDownLoadSuccess(File file); void onDownLoadSuccess(Bitmap bitmap); void onDownLoadFailed(); } [java] view plain copy print ? /** * 启动图片下载线程 */ private void onDownLoad(String url) { DownLoadImageService service = new DownLoadImageService(getApplicationContext(), url, new ImageDownLoadCallBack() { @Override public void onDownLoadSuccess(File file) { } @Override public void onDownLoadSuccess(Bitmap bitmap) { // 在这里执行图片保存方法 Message message = new Message(); message.what = MSG_VISIBLE; handler.sendMessageDelayed(message, delayTime); } @Override public void onDownLoadFailed() { // 图片保存失败 Message message = new Message(); message.what = MSG_ERROR; handler.sendMessageDelayed(message, delayTime); } }); //启动图片下载线程 new Thread(service).start(); } /** * 启动图片下载线程 */ private void onDownLoad(String url) { DownLoadImageService service = new DownLoadImageService(getApplicationContext(), url, new ImageDownLoadCallBack() { @Override public void onDownLoadSuccess(File file) { } @Override public void onDownLoadSuccess(Bitmap bitmap) { // 在这里执行图片保存方法 Message message = new Message(); message.what = MSG_VISIBLE; handler.sendMessageDelayed(message, delayTime); } @Override public void onDownLoadFailed() { // 图片保存失败 Message message = new Message(); message.what = MSG_ERROR; handler.sendMessageDelayed(message, delayTime); } }); //启动图片下载线程 new Thread(service).start(); }