首先需要加上权限——访问网络跟存储卡:

<uses-permission android:name="android.permission.INTERNET"></uses-permission><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <ProgressBar      android:id="@+id/download_main_progressBarlist"     android:layout_width="fill_parent"      android:layout_height="wrap_content"      style="?android:attr/progressBarStyleHorizontal"     />  <TextView     android:id="@+id/download_main_Text"     android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:layout_alignLeft="@+id/download_main_progressBarlist"     android:layout_below="@+id/download_main_progressBarlist"     android:layout_marginTop="42dp"     android:text="当前进度" /> <Button     android:id="@+id/download_main_Button"     android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:layout_alignLeft="@+id/download_main_Text"     android:layout_below="@+id/download_main_Text"     android:layout_marginTop="39dp"     android:text="下载" />"</RelativeLayout> 
MainActivity:
import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import android.app.Activity;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.view.View.OnClickListener;import android.widget.Button; import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;/** * 文件下载 * @author 胡汉三 * */public class MainActivity extends Activity {private static final String Path="文件的HTTP地址/ttt.mp3";private static String fileName = "ttt.mp3";private static String filePath= "/download/";private ProgressBar progressBar; private TextView textView;private Button button;private int FileLength;  private int DownedFileLength=0;private InputStream inputStream;private URLConnection connection;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);progressBar=(ProgressBar) findViewById(R.id.download_main_progressBarlist);textView=(TextView) findViewById(R.id.download_main_Text);button=(Button) findViewById(R.id.download_main_Button);button.setOnClickListener(new ButtonListener());}class ButtonListener implements OnClickListener{@Overridepublic void onClick(View v) {DownedFileLength=0;Thread thread=new Thread(){public void run(){try {DownFile(Path);} catch (Exception e) { }} };thread.start();}   }private Handler handler=new Handler(){public void handleMessage(Message msg){if (!Thread.currentThread().isInterrupted()) {switch (msg.what) {case 0:progressBar.setMax(FileLength);Log.i("文件长度----------->", progressBar.getMax()+"");  break;case 1:progressBar.setProgress(DownedFileLength);int x=DownedFileLength*100/FileLength;textView.setText(x+"%");break;case 2:Toast.makeText(getApplicationContext(), "下载完成", Toast.LENGTH_LONG).show();break;default:break;}}   }};private void DownFile(String urlString){/* * 连接到服务器 */try {URL url=new URL(urlString);connection=url.openConnection();if (connection.getReadTimeout()==5) {Log.i("---------->", "当前网络有问题");// return;}inputStream=connection.getInputStream();} catch (MalformedURLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}/* * 文件的保存路径和和文件名其中Nobody.mp3是在手机SD卡上要保存的路径,如果不存在则新建 */String savePAth=Environment.getExternalStorageDirectory()+filePath;File file1=new File(savePAth);if (!file1.exists()) {file1.mkdir(); }String savePathString=Environment.getExternalStorageDirectory()+filePath+fileName;File file =new File(savePathString);if (!file.exists()) { try {file.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}   }/* * 向SD卡中写入文件,用Handle传递线程 */Message message=new Message();try {RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rwd");randomAccessFile.setLength(FileLength);byte[]buf = new byte[1024*4];FileLength=connection.getContentLength();message.what=0;handler.sendMessage(message);int length = 0;while ((length=inputStream.read(buf))!=-1) {randomAccessFile.write(buf,0,length);DownedFileLength+=length;Log.i("-------->", DownedFileLength+"");Message message1=new Message();message1.what=1;  handler.sendMessage(message1);}inputStream.close(); randomAccessFile.close();Message message2=new Message();message2.what=2;handler.sendMessage(message2);} catch (FileNotFoundException e) {   // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

如此这般,下载文件显示进度条就OK了





更多相关文章

  1. android 开发环境搭建
  2. 在Eclipse 中关联android sdk 源代码
  3. android 打开各种文件的方式
  4. Android(安卓)解析CSV文件,中文乱码
  5. 【Android】向sdcard中写入文件
  6. Android(安卓)4.0 HttpURLConnection 下载失败问题
  7. Android(安卓)apk重新签名
  8. Pycharm安装PyQt5的详细教程
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android-VideoView播放网络视频
  2. android 串口jni 开发流程
  3. 【072】◀▶ Android(安卓)(IV) - 显示及
  4. android TextView 垂直自动滚动字幕实现
  5. android 设置控件的透明度
  6. Android(安卓)远程图片获取和本地缓存(三)
  7. Android开发人员得让短信应用程序准备好
  8. android Looper学习
  9. Android模仿QQ的左右滑动切换界面和下拉
  10. Android(安卓)播放视频(四)VideoView全屏