Android实现下载图片并保存到SD卡中
16lz
2021-01-23
在文件里设置一个点击方法已进行点击下载:
download.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String filePath = imageInfo.get(currentItem).getBigImageUrl(); ImgDonwload.donwloadImg(ImageActivity.this,filePath); }});
下面是ImgDonwload.java图片下载工具类:
package com.vimi8.app.utils.imagesUtils;import android.app.ProgressDialog;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.Log;import android.widget.Toast;import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.UUID;/** * Created by vimi8 on 2017/6/9. */public class ImgDonwload { private static String filePath; private static Bitmap mBitmap; private static String mFileName="为米老乡"; private static String mSaveMessage; private final static String TAG = "ImageActivity"; private static Context context; private static ProgressDialog mSaveDialog = null; public static void donwloadImg(Context contexts,String filePaths){ context = contexts; filePath = filePaths; mSaveDialog = ProgressDialog.show(context, "保存图片", "图片正在保存中,请稍等...", true); new Thread(saveFileRunnable).start(); } private static Runnable saveFileRunnable = new Runnable(){ @Override public void run() { try { byte[] data = getImage(filePath); if(data!=null){ mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);// bitmap }else{ Toast.makeText(context, "Image error!", Toast.LENGTH_LONG).show(); } saveFile(mBitmap, mFileName); mSaveMessage = "图片保存成功!"; } catch (IOException e) { mSaveMessage = "图片保存失败!"; e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } messageHandler.sendMessage(messageHandler.obtainMessage()); } }; private static Handler messageHandler = new Handler() { @Override public void handleMessage(Message msg) { mSaveDialog.dismiss(); Log.d(TAG, mSaveMessage); Toast.makeText(context, mSaveMessage, Toast.LENGTH_SHORT).show(); } }; /** * Get image from newwork * @param path The path of image * @return byte[] * @throws Exception */ public static byte[] getImage(String path) throws Exception{ URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); InputStream inStream = conn.getInputStream(); if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){ return readStream(inStream); } return null; } /** * Get data from stream * @param inStream * @return byte[] * @throws Exception */ public static byte[] readStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len=inStream.read(buffer)) != -1){ outStream.write(buffer, 0, len); } outStream.close(); inStream.close(); return outStream.toByteArray(); } /** * 保存文件 * @param bm * @param fileName * @throws IOException */ public static void saveFile(Bitmap bm, String fileName) throws IOException { File dirFile = new File(Environment.getExternalStorageDirectory().getPath()); if(!dirFile.exists()){ dirFile.mkdir(); } fileName = UUID.randomUUID().toString()+".jpg"; File jia=new File(Environment.getExternalStorageDirectory().getPath() +"/DCIM/VIMI8"); if(!jia.exists()){ //判断文件夹是否存在,不存在则创建 jia.mkdirs(); } File myCaptureFile = new File(jia +"/"+ fileName); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); bm.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); //把图片保存后声明这个广播事件通知系统相册有新图片到来 Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri uri = Uri.fromFile(myCaptureFile); intent.setData(uri); context.sendBroadcast(intent); }}
以上是取得的是byte数组, 从byte数组生成bitmap
以下是取得的是InputStream,直接从InputStream生成bitmap
package com.vimi8.app.utils.imagesUtils;import android.app.ProgressDialog;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.Log;import android.widget.Toast;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.UUID;/** * Created by vimi8 on 2017/6/9. */public class ImgDonwloads { private static String filePath; private static Bitmap mBitmap; private static String mFileName="为米老乡"; private static String mSaveMessage; private final static String TAG = "ImageActivity"; private static Context context; private static ProgressDialog mSaveDialog = null; public static void donwloadImg(Context contexts,String filePaths){ context = contexts; filePath = filePaths; mSaveDialog = ProgressDialog.show(context, "保存图片", "图片正在保存中,请稍等...", true); new Thread(saveFileRunnable).start(); } private static Runnable saveFileRunnable = new Runnable(){ @Override public void run() { try { mBitmap = BitmapFactory.decodeStream(getImageStream(filePath)); saveFile(mBitmap, mFileName); mSaveMessage = "图片保存成功!"; } catch (IOException e) { mSaveMessage = "图片保存失败!"; e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } messageHandler.sendMessage(messageHandler.obtainMessage()); } }; private static Handler messageHandler = new Handler() { @Override public void handleMessage(Message msg) { mSaveDialog.dismiss(); Log.d(TAG, mSaveMessage); Toast.makeText(context, mSaveMessage, Toast.LENGTH_SHORT).show(); } }; /** * Get image from newwork * @param path The path of image * @return InputStream * @throws Exception */ public static InputStream getImageStream(String path) throws Exception{ URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){ return conn.getInputStream(); } return null; } /** * 保存文件 * @param bm * @param fileName * @throws IOException */ public static void saveFile(Bitmap bm, String fileName) throws IOException { File dirFile = new File(Environment.getExternalStorageDirectory().getPath()); if(!dirFile.exists()){ dirFile.mkdir(); } fileName = UUID.randomUUID().toString()+".jpg"; File myCaptureFile = new File(Environment.getExternalStorageDirectory().getPath() +"/DCIM/Camera/"+ fileName); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); bm.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); //把图片保存后声明这个广播事件通知系统相册有新图片到来 Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri uri = Uri.fromFile(myCaptureFile); intent.setData(uri); context.sendBroadcast(intent); }}
更多相关文章
- android中实现从相册中一次性获取多张图片与拍照,并将选中的图片
- EditText插入表情图片
- android操作sqlite3的blob字段,显示数据中的图片
- android 获取SD卡的图片及其路径
- Android:读取本地相册与相机获取图片上传到服务器(用字符串的形式
- Android 图片缩放与旋转的实现详解
- 图片的放大缩小
- 关于android 调用系统图片浏览器并返回图片路径问题