Android实现下载图片并保存到SD卡中
来源:互联网 发布:2017黑页源码带音乐 编辑:程序博客网 时间:2024/05/16 16:18
在文件里设置一个点击方法已进行点击下载:
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); }}
阅读全文
0 0
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中()
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Android实现下载图片并保存到SD卡中
- Elasticsearch ulimit
- centos7安装配置zabbix
- 第一篇
- 当移动到li标签上,显示对应的div层,并且只有移动其它li标签才会切换显示隐藏
- 使用_Python_和_Asyncio_编写在线多用人游戏(二)
- Android实现下载图片并保存到SD卡中
- logback 常用配置详解(序)logback 简介
- 身边有位“别人家的程序员”是什么样的体验?
- 总结 Android 开发中必备的代码 Review 清单
- 从高考跌进01的世界
- RedHat 7 找回root密码和grub2加密
- 使用 GNU autotools 改造一个软件项目
- jquery.flot.js 之 柱状图
- sleep与usleep备忘