下载图片是我们经常会做的操作,给定一个图片的url,下载改图片到手机sdcard的方法,代码如下:
public void saveImages(String imageViewsUrl){
InputStream is = null; //定义一个输入流。
BufferedInputStream bis = null; //定义一个带缓冲的输入流 。
try{
URL url = new URL(imageViewsUrl); //创建一个URL对象。
is = url.openStream(); //打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。
bis = new BufferedInputStream(is);
}catch(Exception e){
System.out.println(e.toString());
// mHandler.sendEmptyMessage(5); //下载图片失败
}
//在sdcar中创建储存图片的文件
midr = Environment.getExternalStorageDirectory()+ "/saveImage";
File fird = new File(midr);
if(!fird.exists()){
fird.mkdirs(); //sdcard中没有该创建新文件夹
}
//考虑文件重名问题,获取系统时间命名图片文件
dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String systemTime = dateFormat.format(new java.util.Date());
path = Environment.getExternalStorageDirectory()+ "/saveImage/" + "wx"+"_"+systemTime+".jpg";
//写到本地
BufferedOutputStream bos = null; //定义一个带缓冲的输出流。
File file = new File(path);
try{
bos = new BufferedOutputStream(new FileOutputStream(file));
int len = 0;
byte[] b = new byte[1024]; //创建字节数组。
while((len = bis.read(b))>0){
bos.write(b,0,len);
}
scanFileAsync(mContext, path); //扫扫描指定文件 当图片下载到sdcard后,我们打开手机相册是看不到下载的图片,需要扫描图片文件指定的目录后才可以看到
scanDirAsync(mContext,path); //扫描指定路径 mContext是上下文 path 是下载到sdcard的图片地址
}catch(Exception e){
System.out.println("++++++++++++++++++"+e.toString());
// mHandler.sendEmptyMessage(5); //下载图片失败
}finally{
try{
bos.flush(); //刷新此缓冲的输出流。
bis.close(); //关闭此输入流 。
}catch(Exception e){
System.out.println("++++++++++++++++++"+e.toString());
}
}
}
//扫描指定文件
public void scanFileAsync(Context ctx, String filePath) {
Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
scanIntent.setData(Uri.fromFile(new File(filePath)));
ctx.sendBroadcast(scanIntent);
}
//扫描指定目录
public static final String ACTION_MEDIA_SCANNER_SCAN_DIR = "android.intent.action.MEDIA_SCANNER_SCAN_DIR";
public void scanDirAsync(Context ctx, String dir) {
Intent scanIntent = new Intent(ACTION_MEDIA_SCANNER_SCAN_DIR);
scanIntent.setData(Uri.fromFile(new File(dir)));
ctx.sendBroadcast(scanIntent);
}