您的位置:首页 > 理论基础 > 计算机网络

Android开发下载网络图片到本地文件

2017-06-09 15:20 1511 查看
第一种方法用系统的DownloadManager下载

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);

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: