Добрый день. Сделал AsyncTask отдельным файлом.Скачиваю фаил, появляется ProgressDialog идет процесс закачки на карту, все работает.
Задумка такая: как сделать проверку перед началом скачивания на наличие свободного места в памяти телефона. Если место есть - идет скачивание файла. Если места нет - диалог : освободите столько то.
XML |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:id="@+id/button1"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="77dp"
android:background="#ffdfbe26"
android:textSize="16dp"
android:text="Download " />
</RelativeLayout> |
|
фаил MainActivity
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity implements View.OnClickListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b1 = (Button) findViewById(R.id.button1);
b1.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// Создаём новый AsyncTask, передаём параметры конструктору
FileDownloader fd1 = new FileDownloader(this, "http://www.ex.ua/load/64512252", "/sdcard/Download/", "a999.zip");
fd1.execute();//}
}
} |
|
фаил с AsyncTask
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
public class FileDownloader extends AsyncTask<String, String, String> {
String downloadURL;
String savePath;
String fileName;
Activity activity1;
ProgressDialog pDialog;
//Принимаем в конструкторе путь сохранения файла, название и контекст для ProgressDialog
public FileDownloader(Activity activity0, String url, String path, String name) {
downloadURL = url;
savePath = path;
fileName = name;
activity1 = activity0;
}
protected void onPreExecute() {
pDialog = new ProgressDialog(activity1);// ProgressDialog
pDialog.setMessage("Идет cкачивание файла...");
pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pDialog.setCancelable(false);
pDialog.show();
super.onPreExecute();
}
protected String doInBackground(String... s) {
int count; // количество прочитанных байт
try {
URL url = new URL(downloadURL);
URLConnection conexion = url.openConnection();
conexion.connect();// метод connect производит соединение
int lenghtOfFile = conexion.getContentLength();// После соединения с сервером получаем размер загружаемого файла
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(savePath + fileName);
byte data[] = new byte[1024];//Создаём новый пустой массив
long total = 0;//Переменная total содержит общее количество прочитанных данных в байтах.
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);//Записываем данные из входного потока в файловый.
}//data - данные, 0 - откуда начинать запись(то есть с начала массива data)
//count - сколько данных записывать (то есть столько, сколько мы прочитали методом read)
output.flush();//Метод flush производит окончательную запись данных из файлового потока на карту памяти
output.close();//Закрытие файлового потока
input.close();// Закрытие входного потока - закрытие соединения с сервером.
}
catch (Exception e) {Log.d("ANDRO_ASYNC","Произошла фигня, разрыв соединения!");}
return null;
}
protected void onProgressUpdate(String... progress) {
pDialog.setProgress(Integer.parseInt(progress[0]));// обновляем
}
protected void onPostExecute(String unused) {
pDialog.dismiss();// закрытие pDialog
}
} |
|