package com.outdoors.jinghuang.demo; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import org.w3c.dom.Text; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * Created by jing.huang on 2016/12/13. */ public class DownLoadAndSaveImage extends Activity implements View.OnClickListener { private ImageView showImage; private ProgressBar loadProgress; private Button downLoadImageBt; private Button saveImageBt; private TextView showProgressTv; //图片的下载地址 private final String PATH = "https://img-my.csdn.net/uploads/201402/24/1393242467_3999.jpg"; private String fileName = "save_image.jpg";//保存图片的名字 private String savePath;//保存路径 private Bitmap bitmap; private static final int SAVE_SUCCESSFUL = 1001; private static final int SAVE_UNSUCCESSFUL = 1002; private ProgressDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.load_and_save_iamge); showImage = (ImageView) findViewById(R.id.show_image); loadProgress = (ProgressBar) findViewById(R.id.load_progress); downLoadImageBt = (Button) findViewById(R.id.down_load_image); saveImageBt = (Button) findViewById(R.id.save_iamge); showProgressTv = (TextView) findViewById(R.id.show_progress_tv); downLoadImageBt.setOnClickListener(this); saveImageBt.setOnClickListener(this); loadProgress.setVisibility(View.GONE); showProgressTv.setVisibility(View.GONE); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.down_load_image://下载图片 loadProgress.setVisibility(View.VISIBLE); showProgressTv.setVisibility(View.VISIBLE); downLoadImage(); break; case R.id.save_iamge://保存图片 saveImage(); break; default: break; } } /** * 保存图片 */ private void saveImage() { if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { Toast.makeText(this, "The sdCard cannot be used!", Toast.LENGTH_SHORT).show(); return; } //显示dialog dialog = new ProgressDialog(this); dialog.setTitle("保存图片"); dialog.setMessage("图片正在保存,请稍后"); dialog.setIndeterminate(true); dialog.show(); new Thread(new Runnable() { @Override public void run() { savePath = Environment.getExternalStorageDirectory() + "/save_image/"; Log.d("DownLoadAndSaveImage", "path :" + Environment.getExternalStorageDirectory().getPath()); File file = new File(savePath); if (!file.exists()) { file.mkdirs(); } File fileImage = new File(savePath + fileName); BufferedOutputStream bos = null; Message msg = mhandler.obtainMessage(); try { bos = new BufferedOutputStream(new FileOutputStream(fileImage)); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos); // msg.what = SAVE_SUCCESSFUL; mhandler.sendEmptyMessageDelayed(SAVE_SUCCESSFUL, 2000); } catch (FileNotFoundException e) { // msg.what = SAVE_UNSUCCESSFUL; mhandler.sendEmptyMessageDelayed(SAVE_UNSUCCESSFUL, 2000); } finally { if (bos != null) { try { bos.close(); bos = null; } catch (IOException e) { e.printStackTrace(); } } } } }).start(); } private Handler mhandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); dialog.dismiss(); switch (msg.what) { case SAVE_SUCCESSFUL: Toast.makeText(DownLoadAndSaveImage.this, "Image saved successful!", Toast.LENGTH_SHORT).show(); break; case SAVE_UNSUCCESSFUL: Toast.makeText(DownLoadAndSaveImage.this, "Image saved unsuccessful!", Toast.LENGTH_SHORT).show(); break; default: break; } } }; /** * 下载图片 */ private void downLoadImage() { MyAsyncTask myAsyncTask = new MyAsyncTask(); myAsyncTask.execute(PATH); } private class MyAsyncTask extends AsyncTask<String, Integer, Bitmap> { private int currentSize; private int currentProgress; @Override protected void onPreExecute() { super.onPreExecute(); loadProgress.setProgress(0); loadProgress.setMax(100); } @Override protected Bitmap doInBackground(String... strings) { InputStream inputStream = null; ByteArrayOutputStream baos = null; try { URL url = new URL(strings[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); int total = connection.getContentLength(); inputStream = connection.getInputStream(); baos = new ByteArrayOutputStream(); byte[] byteData = new byte[8]; int len = 0; while (true) { len = inputStream.read(byteData, 0, byteData.length); if (len < 0) { break; } currentSize += len; currentProgress = (int) (100 * currentSize / total); baos.write(byteData, 0, len); publishProgress(currentProgress); } byte[] bytes = baos.toByteArray(); bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); } catch (Exception e) { e.printStackTrace(); } finally { if (baos != null) { try { baos.close(); baos = null; } catch (IOException e) { e.printStackTrace(); } } if (inputStream != null) { try { inputStream.close(); inputStream = null; } catch (IOException e) { e.printStackTrace(); } } } return bitmap; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); loadProgress.setProgress(values[0]); showProgressTv.setText("已下载:" + currentProgress + "%"); } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); loadProgress.setVisibility(View.GONE); showProgressTv.setVisibility(View.GONE); showImage.setImageBitmap(bitmap); } } }
图片的下载和保存
最新推荐文章于 2022-05-18 14:02:50 发布