使用AsyncTask弹出进度条ProgressDialog,利用网上的某音乐地址下载歌曲

有些时候,在你编写程序的时候某种控件不经常使用就会忘记怎么使用。就像AsyncTask、ProgressDialog、网络下载数据等。所以,我就有意的把这些东西记录下来,以免它们从我的生活中淡出!<这个图片不是这个程序运行的效果,但是大概就是这样的>

使用AsyncTask弹出进度条ProgressDialog,利用网上的某音乐地址下载歌曲_第1张图片


 /** * 在使用抽象类"AsyncTask"时候,通过继承它来重写其中<1>onPreExecute、<2>doInBackground、 * <3>onProgressUpdate、<4>onPostExecute四个方法; * 并且在AsyncTask<Void, Integer, Void> 中的三个参数分别对应方法<2><3><4>中的参数。 * * 特别注意,使用该种方式也要进行信息的交流,在执行后台耗时操作时 使用mAsynctask.this.publishProgress(count); * 传递信息。 * */


public class MainActivity extends Activity {

	private AsyncTask<Void, Integer, Void> at;
	private ProgressDialog pd;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void onClick(View v) {
		Void params[] = null;
		at = new AsyncTask<Void, Integer, Void>() {
			protected void onPreExecute() {
				pd = new ProgressDialog(MainActivity.this);
				pd.setMax(200);
				pd.setTitle("提示");
				pd.setMessage("下载中,请稍后..");
				pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
				pd.show();
			}

			@Override
			protected Void doInBackground(Void... params) {

				String spec = "http://zhangmenshiting.baidu.com/data2/music/90350586/8930817375600128.mp3?xcode=544df7e8700d7942344de01ecf439f0a24b7b177cb0d29e2";
				int total = 0;
				// TODO Auto-generated method stub
				try {
					HttpURLConnection huc = (HttpURLConnection) new URL(spec)
							.openConnection();
					huc.setRequestMethod("GET");
					Long musicLengh = (long) huc.getContentLength();
					InputStream in = huc.getInputStream();
					FileOutputStream fos = new FileOutputStream(new File(
							"/mnt/sdcard/", "huahua"));
					byte[] b = new byte[512];
					int byte_count = 0;
					while (-1 != (byte_count = in.read(b))) {
						fos.write(b, 0, byte_count);
						total += byte_count;
						publishProgress((int) (120 * total / musicLengh));
					}
				} catch (Exception e) {
				}
				;
				return null;
			}

			@Override
			protected void onProgressUpdate(Integer... values) {
				// TODO Auto-generated method stub
				pd.setProgress(values[0]);
				super.onProgressUpdate(values);
			}

			@Override
			protected void onPostExecute(Void result) {
				// TODO Auto-generated method stub
				pd.dismiss();
				Toast.makeText(getApplicationContext(), "下载完毕", 200).show();
				super.onPostExecute(result);
			}

		}.execute(params);

	}

}



   

你可能感兴趣的:(android,网络,AsyncTask,对话框,下载音乐)