天天看點

Android開發下載下傳網絡圖檔到本地檔案

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

            }
        }

    }
           

繼續閱讀