Android开发下载网络图片到本地文件
2017-06-09 15:20
1511 查看
第一种方法用系统的DownloadManager下载
第二种方法下载为bitmap转为file文件方式。因为下载图片时耗时操作,最好用新线程
/**
* 获取网络图片
*
* @param imageurl 图片网络地址
* @return Bitmap 返回位图
*/
public static Bitmap GetImageInputStream(String imageurl) {
URL url;
HttpURLConnection connection = null;
Bitmap bitmap = null;
try {
url = new URL(imageurl);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(6000); //超时设置
connection.setDoInput(true);
connection.setUseCaches(false); //设置不使用缓存
InputStream inputStream = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
/**
* 保存位图到本地
*
* @param bitmap
* @param pathDir 本地路径
* @return void
*/
public static void SavaImage(Context context, Bitmap bitmap, String pathDir, String imageName, String toastMsg) {
if (bitmap != null) {
File file = new File(pathDir);
FileOutputStream fileOutputStream = null;
//文件夹不存在,则创建它,只是创建wx文件夹
if (!file.exists()) {
file.mkdir();
}
try {
fileOutputStream = new FileOutputStream(pathDir + "/" + imageName + ".jpg");
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.close();
ToastUtils.showLong(context, R.string.down_success);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void SaveImageTask(Context context, String url, String path, String imageName, String toastMsg) {
new ImageTask(context, url, path, imageName, toastMsg).execute();
}
/**
* 异步线程下载图片
*/
static class ImageTask extends AsyncTask<String, Integer, Bitmap> {
private Context mContext;
private String url;
private String path;
private String toastMsg;
private String imageName;
public ImageTask(Context context, String url, String path, String imageName, String toastMsg) {
this.mContext = context;
this.url = url;
this.path = path;
this.toastMsg = toastMsg;
this.imageName = imageName;
}
protected Bitmap doInBackground(String... params) {
Bitmap bitmap = null;
bitmap = GetImageInputStream(url);
return bitmap;
}
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (result != null) {
SavaImage(mContext, result, path, imageName, toastMsg);
}
}
}
Uri uri = Uri.parse(imgUrl);//imgUrl:图片网络地址 DownloadManager.Request request = new DownloadManager.Request(uri); //设置允许使用的网络类型,这里是移动网络和wifi都可以 request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI); request.allowScanningByMediaScanner(); //禁止发出通知,既后台下载,如果要使用这一句必须声明一个权限:android.permission.DOWNLOAD_WITHOUT_NOTIFICATION //request.setShowRunningNotification(false); //不显示下载界面 request.setVisibleInDownloadsUi(true); request.setDestinationInExternalPublicDir("/DCIM/wx/", name);//name:图片名称,记得带后缀 long id = downloadManager.enqueue(request);
第二种方法下载为bitmap转为file文件方式。因为下载图片时耗时操作,最好用新线程
/**
* 获取网络图片
*
* @param imageurl 图片网络地址
* @return Bitmap 返回位图
*/
public static Bitmap GetImageInputStream(String imageurl) {
URL url;
HttpURLConnection connection = null;
Bitmap bitmap = null;
try {
url = new URL(imageurl);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(6000); //超时设置
connection.setDoInput(true);
connection.setUseCaches(false); //设置不使用缓存
InputStream inputStream = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
/**
* 保存位图到本地
*
* @param bitmap
* @param pathDir 本地路径
* @return void
*/
public static void SavaImage(Context context, Bitmap bitmap, String pathDir, String imageName, String toastMsg) {
if (bitmap != null) {
File file = new File(pathDir);
FileOutputStream fileOutputStream = null;
//文件夹不存在,则创建它,只是创建wx文件夹
if (!file.exists()) {
file.mkdir();
}
try {
fileOutputStream = new FileOutputStream(pathDir + "/" + imageName + ".jpg");
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.close();
ToastUtils.showLong(context, R.string.down_success);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void SaveImageTask(Context context, String url, String path, String imageName, String toastMsg) {
new ImageTask(context, url, path, imageName, toastMsg).execute();
}
/**
* 异步线程下载图片
*/
static class ImageTask extends AsyncTask<String, Integer, Bitmap> {
private Context mContext;
private String url;
private String path;
private String toastMsg;
private String imageName;
public ImageTask(Context context, String url, String path, String imageName, String toastMsg) {
this.mContext = context;
this.url = url;
this.path = path;
this.toastMsg = toastMsg;
this.imageName = imageName;
}
protected Bitmap doInBackground(String... params) {
Bitmap bitmap = null;
bitmap = GetImageInputStream(url);
return bitmap;
}
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (result != null) {
SavaImage(mContext, result, path, imageName, toastMsg);
}
}
}
相关文章推荐
- Android开发实现加载网络图片并下载至本地SdCard的方法
- Android异步从网络下载图片并且缓存图片到本地的demo
- 下载图片--网络图片下载。(读取网络文件,填充到本地文件。)
- 技术篇-android ListView网络图片下载文件缓存
- Android开发之异步下载网络图片并显示到UI界面
- [置顶] 网络请求以及网络请求下载图片的工具类 android开发java工具类
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android 下载网络图片保存到本地
- Android开发利用Volley框架下载和缓存网络图片
- android开发之就本地和网络图片的压缩以及缓存详解
- Android开发利用Volley框架下载和缓存网络图片
- asp.net(c#)从url网络地址下载图片或文件到本地硬盘
- [转]浅谈 Android 开发中的网络下载策略 与 文件缓存策略
- Android--第四天(网络图片查看器,多线程下载,文件断点上传原理,Intent,Activity生命周期,广播,服务)
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步从网络下载图片并且缓存图片到本地的demo
- 技术篇-android ListView网络图片下载文件缓存
- android通过NDK连接网络下载图片到本地
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步从网络下载图片并且缓存图片到本地的demo