第一種方法用系統的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);
}
}
}