1. 首先將 圖片轉換成 Bitmap
/** * 獲取網絡圖片 * * @param imageurl 圖片網絡地址 * @return Bitmap 返回位圖 */ 兩個常量
private static final String SAVE_PIC_PATH = Environment.getExternalStorageState() .equalsIgnoreCase(Environment.MEDIA_MOUNTED) ? Environment.getExternalStorageDirectory() .getAbsolutePath() : "/mnt/sdcard";//保存到SD卡 private static final String SAVE_REAL_PATH = SAVE_PIC_PATH + "/ayb";//保存的確切位置
public Bitmap GetImageInputStream(String imageurl) { URL url; HttpURLConnection connection = 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;} 2 . 保存圖片到本地
/** * 保存位圖到本地 * * @param bitmap * @param path 本地路徑 * @return void */ public File SavaImage(Bitmap bitmap, String path) { File file = new File(path); FileOutputStream fileOutputStream = null; //文件夾不存在,則創建它 if (!file.exists()) { file.mkdir(); } try { fileOutputStream = new FileOutputStream(path + "/" + System.currentTimeMillis() + ".png"); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream); Tools.mToast(getApplicationContext(), "保存成功" + SAVE_REAL_PATH); fileOutputStream.close(); return file; } catch (Exception e) { e.printStackTrace(); Tools.mToast(getApplicationContext(), "保存失敗"); Log.d(TAG, "保存圖片失敗: " + e.toString()); return null; } }
3. 異步加載圖片並保存
/** * 異步線程下載圖片 */ Bitmap bitmap; class Task extends AsyncTask<String, Integer, Void> { protected Void doInBackground(String... params) { bitmap = GetImageInputStream((String) params[0]); Log.d(TAG, "bitmap: " + bitmap.toString()); return null; } @Override protected void onPostExecute(Void aVoid) { File file = SavaImage(bitmap, SAVE_REAL_PATH); if (file != null) { Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri uri = Uri.fromFile(file); intent.setData(uri); //這個廣播的目的就是更新圖庫,發了這個廣播進入相冊就可以找到你保存的圖片了!,記得要傳你更新的file哦 getApplicationContext().sendBroadcast(intent); } } }4. 最後一步 調用 AsyncTask 方法 即可
new Task().execute(imageURL); //傳入圖片地址