Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Albatross
0 / 0 / 0
Регистрация: 22.04.2016
Сообщений: 2
#1

Как сделать проверку памяти перед скачиванием файла - Android

22.04.2016, 11:22. Просмотров 132. Ответов 1
Метки нет (Все метки)

Добрый день. Сделал 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
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2016, 11:22     Как сделать проверку памяти перед скачиванием файла
Посмотрите здесь:

Как сделать заставку перед игрой? Android
Как удалить приложение из памяти Android
Android Как сделать выгрузку строк из файла в приложении
Android Как убрать в Android Studio предварительную проверку ошибок?
Как побороть нехвату памяти? Android
Выбор аудио файла из карты памяти Android
Как получить каталог встроенной памяти?) Android
Как получить характеристики изображения перед выводом? Android
Android Перед звонком как выбрать с какого номера звонить?
Как сделать проверку обновлений и их загрузку? Android
Чтение ассоциированного .txt файла с внутренней памяти по URI Android
Сделать паузу перед закрытием AlertDilaog Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
22.04.2016, 11:30     Как сделать проверку памяти перед скачиванием файла #2
Java
1
2
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount();
Получаете размер свободного места в байтах, дальше сравнивайте с размером файла.
Yandex
Объявления
22.04.2016, 11:30     Как сделать проверку памяти перед скачиванием файла
Ответ Создать тему
Опции темы

Текущее время: 04:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru