易网时代-编程资源站
Welcome
微信登录
首页
/
操作系统
/
Linux
/
Android 下载文件 进度条显示
加入两个权限一个是联网,另一个是读写SD卡
<uses-permission
Android:name
=
"android.permission.INTERNET"
></uses-permission
>
<uses-permission
android:name
=
"android.permission.WRITE_EXTERNAL_STORAGE"
></uses-permission
>
下载地址是本人的另外一台主机,现在当服务器了,路径可以测试
http://210.30.12.1:8080/mp3/DJ.mp3
import
java.io.File;
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.OutputStream;
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;
public
class
FileDownProcessBarActivity
extends
Activity {
/** Called when the activity is first created. */
private
static
final
String Path=
"http://210.30.12.1:8080/mp3/DJ.mp3"
;
private
ProgressBar progressBar;
private
TextView textView;
private
Button button;
private
int
FileLength;
private
int
DownedFileLength=
0
;
private
InputStream inputStream;
private
URLConnection connection;
private
OutputStream outputStream;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
progressBar=(ProgressBar) findViewById(R.id.progressBar1);
textView=(TextView) findViewById(R.id.textView2);
button=(Button) findViewById(R.id.button1);
button.setOnClickListener(
new
ButtonListener());
}
class
ButtonListener
implements
OnClickListener{
@Override
public
void
onClick(View v) {
DownedFileLength=
0
;
// TODO Auto-generated method stub
Thread thread=
new
Thread(){
public
void
run(){
try
{
DownFile(Path);
}
catch
(Exception e) {
// TODO: handle exception
}
}
};
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 block
e1.printStackTrace();
}
catch
(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
* 文件的保存路径和和文件名其中Nobody.mp3是在手机SD卡上要保存的路径,如果不存在则新建
*/
String savePAth=Environment.getExternalStorageDirectory()+
"/DownFile"
;
File file1=
new
File(savePAth);
if
(!file1.exists()) {
file1.mkdir();
}
String savePathString=Environment.getExternalStorageDirectory()+
"/DownFile/"
+
"DJ.mp3"
;
File file =
new
File(savePathString);
if
(!file.exists()) {
try
{
file.createNewFile();
}
catch
(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 向SD卡中写入文件,用Handle传递线程
*/
Message message=
new
Message();
try
{
outputStream=
new
FileOutputStream(file);
byte
[] buffer=
new
byte
[
1024
*
4
];
FileLength=connection.getContentLength();
message.what=
0
;
handler.sendMessage(message);
while
(DownedFileLength<FileLength) {
outputStream.write(buffer);
DownedFileLength+=inputStream.read(buffer);
Log.i(
"-------->"
, DownedFileLength+
""
);
Message message1=
new
Message();
message1.what=
1
;
handler.sendMessage(message1);
}
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 block
e.printStackTrace();
}
}
}
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图