android 根據圖片路徑 保存圖片到相冊

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); //傳入圖片地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章