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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.96
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
#1

Загрузка файла из сети, и его выполнение - Программирование Android

30.07.2013, 21:17. Просмотров 3733. Ответов 11
Метки нет (Все метки)

Здравсвуйте, пытаюсь загрузить файл из сети (это файл приложения *.apk), и после загрузки сразу его запустить.
Вот то что накодил, тут есть ошибка в onPostExecute(), в setData()...
До этого пробовал передать file в интент, но нифига не вышло, ошибка вылетала...
Посмотрите, что тут надо подправить?
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
    private void downloadFile(String url) {
          final ProgressDialog progressDialog = new ProgressDialog(this);
         
          new AsyncTask<String, Integer, File>() {
           private Exception m_error = null;
         
           @Override
           protected void onPreExecute() {
            progressDialog.setMessage("Downloading ...");
            progressDialog.setCancelable(false);
            progressDialog.setMax(100);
            progressDialog
              .setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
         
            progressDialog.show();
           }
         
           @Override
           protected File doInBackground(String... params) {
            URL url;
            HttpURLConnection urlConnection;
            InputStream inputStream;
            int totalSize;
            int downloadedSize;
            byte[] buffer;
            int bufferLength;
         
            File file = null;
            FileOutputStream fos = null;
         
            try {
             url = new URL(params[0]);
             urlConnection = (HttpURLConnection) url.openConnection();
         
             urlConnection.setRequestMethod("GET");
             urlConnection.setDoOutput(true);
             urlConnection.connect();
         
             file = File.createTempFile("Mustachify", "download");
             fos = new FileOutputStream(file);
             inputStream = urlConnection.getInputStream();
         
             totalSize = urlConnection.getContentLength();
             downloadedSize = 0;
         
             buffer = new byte[1024];
             bufferLength = 0;
         
             // читаем со входа и пишем в выход, 
             // с каждой итерацией публикуем прогресс
             while ((bufferLength = inputStream.read(buffer)) > 0) {
              fos.write(buffer, 0, bufferLength);
              downloadedSize += bufferLength;
              publishProgress(downloadedSize, totalSize);
             }
         
             fos.close();
             inputStream.close();
         
             return file;
            } catch (MalformedURLException e) {
             e.printStackTrace();
             m_error = e;
            } catch (IOException e) {
             e.printStackTrace();
             m_error = e;
            }
         
            return null;
           }
         
           // обновляем progressDialog
           protected void onProgressUpdate(Integer... values) {
            progressDialog
              .setProgress((int) ((values[0] / (float) values[1]) * 100));
           };
         
           @Override
           protected void onPostExecute(File file) {
            // отображаем сообщение, если возникла ошибка
            if (m_error != null) {
             m_error.printStackTrace();
             return;
            }
            // закрываем прогресс и удаляем временный файл
            progressDialog.hide();
            //file.delete();
 
 
            File sdDir = new File(Environment.getExternalStorageDirectory().getPath());
            File testDir = new File(sdDir.getAbsolutePath() + "/myDIR");
            testDir.mkdir();
            try {
                File.createTempFile("proga", "apk", testDir);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            Intent promptInstall = new Intent(Intent.ACTION_VIEW)
            .setData(File)
            .setType("application/vnd.android.package-archive");
            startActivity(promptInstall);
            
           }
          }.execute(url);
         }
Добавлено через 40 минут
Я хочу после
Java
1
 progressDialog.hide();
запустить файл....
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.07.2013, 00:50     Загрузка файла из сети, и его выполнение #2
какая ошибка вылетает?
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
31.07.2013, 15:38  [ТС]     Загрузка файла из сети, и его выполнение #3
Цитата Сообщение от V0v1k Посмотреть сообщение
какая ошибка вылетает?
Пределал, теперь ошибка: unfortunately has stopped

код:
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
    
    private void downloadFile(String url) {
          final ProgressDialog progressDialog = new ProgressDialog(this);
         
          new AsyncTask<String, Integer, File>() {
           private Exception m_error = null;
         
           @Override
           protected void onPreExecute() {
            progressDialog.setMessage("Downloading ...");
            progressDialog.setCancelable(false);
            progressDialog.setMax(100);
            progressDialog
              .setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
         
            progressDialog.show();
           }
         
           @SuppressLint("SdCardPath")
        @Override
           protected File doInBackground(String... params) {
            URL url;
            HttpURLConnection urlConnection;
            InputStream inputStream;
            int totalSize;
            int downloadedSize;
            byte[] buffer;
            int bufferLength;
         
            //File file = null;
            
            File file = new File("/sdcard/mysdfile.apk");
            try {
                file.createNewFile();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            
            FileOutputStream fos = null;
         
            try {
             url = new URL(params[0]);
             urlConnection = (HttpURLConnection) url.openConnection();
         
             urlConnection.setRequestMethod("GET");
             urlConnection.setDoOutput(true);
             urlConnection.connect();
         
             file = File.createTempFile("Mustachify", "download");
             fos = new FileOutputStream(file);
             inputStream = urlConnection.getInputStream();
         
             totalSize = urlConnection.getContentLength();
             downloadedSize = 0;
         
             buffer = new byte[1024];
             bufferLength = 0;
         
             // читаем со входа и пишем в выход, 
             // с каждой итерацией публикуем прогресс
             while ((bufferLength = inputStream.read(buffer)) > 0) {
              fos.write(buffer, 0, bufferLength);
              downloadedSize += bufferLength;
              publishProgress(downloadedSize, totalSize);
             }
         
             fos.close();
             inputStream.close();
         
             return file;
            } catch (MalformedURLException e) {
             e.printStackTrace();
             m_error = e;
            } catch (IOException e) {
             e.printStackTrace();
             m_error = e;
            }
         
            return null;
           }
         
           // обновляем progressDialog
           protected void onProgressUpdate(Integer... values) {
            progressDialog
              .setProgress((int) ((values[0] / (float) values[1]) * 100));
           };
         
           @SuppressLint("SdCardPath")
        @Override
           protected void onPostExecute(File file) {
            // отображаем сообщение, если возникла ошибка
            if (m_error != null) {
             m_error.printStackTrace();
             return;
            }
            // закрываем прогресс 
            progressDialog.hide();
 
 
            
            Intent promptInstall = new Intent(Intent.ACTION_VIEW)
            .setData(Uri.parse("/sdcard/mysdfile.apk"))
            .setType("application/vnd.android.package-archive");
            startActivity(promptInstall);
            
           }
          }.execute(url);
         }
Лог:
Код
07-31 10:42:57.852: I/Choreographer(1022): Skipped 40 frames!  The application may be doing too much work on its main thread.
07-31 10:43:00.323: D/dalvikvm(1022): GC_CONCURRENT freed 48K, 4% free 5452K/5656K, paused 115ms+59ms, total 402ms
07-31 10:43:00.393: W/System.err(1022): java.io.IOException: open failed: EACCES (Permission denied)
07-31 10:43:00.433: W/System.err(1022): 	at java.io.File.createNewFile(File.java:948)
07-31 10:43:00.493: W/System.err(1022): 	at com.net.homeandroid.AppActivity$1.doInBackground(AppActivity.java:115)
07-31 10:43:00.673: I/Choreographer(1022): Skipped 32 frames!  The application may be doing too much work on its main thread.
07-31 10:43:01.543: W/System.err(1022): 	at com.net.homeandroid.AppActivity$1.doInBackground(AppActivity.java:1)
07-31 10:43:01.543: W/System.err(1022): 	at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-31 10:43:01.633: W/System.err(1022): 	at java.util.concurrent.FutureTask.run(FutureTask.java:234)
07-31 10:43:01.664: W/System.err(1022): 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-31 10:43:01.767: W/System.err(1022): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
07-31 10:43:01.893: W/System.err(1022): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
07-31 10:43:01.997: W/System.err(1022): 	at java.lang.Thread.run(Thread.java:856)
07-31 10:43:02.363: W/System.err(1022): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
07-31 10:43:02.553: W/System.err(1022): 	at libcore.io.Posix.open(Native Method)
07-31 10:43:02.553: W/System.err(1022): 	at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
07-31 10:43:02.553: W/System.err(1022): 	at java.io.File.createNewFile(File.java:941)
07-31 10:43:02.647: W/System.err(1022): 	... 8 more
07-31 10:44:04.982: D/dalvikvm(1022): GC_CONCURRENT freed 883K, 16% free 5464K/6464K, paused 118ms+51ms, total 575ms
07-31 10:45:06.507: D/dalvikvm(1022): GC_CONCURRENT freed 965K, 17% free 5398K/6480K, paused 4ms+7ms, total 419ms
07-31 10:46:06.023: D/dalvikvm(1022): GC_CONCURRENT freed 874K, 17% free 5399K/6480K, paused 211ms+116ms, total 543ms
07-31 10:46:52.253: D/AndroidRuntime(1022): Shutting down VM
07-31 10:46:52.293: W/dalvikvm(1022): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
07-31 10:46:52.403: E/AndroidRuntime(1022): FATAL EXCEPTION: main
07-31 10:46:52.403: E/AndroidRuntime(1022): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=application/vnd.android.package-archive }
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.app.Activity.startActivityForResult(Activity.java:3370)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.app.Activity.startActivityForResult(Activity.java:3331)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.app.Activity.startActivity(Activity.java:3566)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.app.Activity.startActivity(Activity.java:3534)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at com.net.homeandroid.AppActivity$1.onPostExecute(AppActivity.java:189)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at com.net.homeandroid.AppActivity$1.onPostExecute(AppActivity.java:1)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.os.AsyncTask.finish(AsyncTask.java:631)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.os.AsyncTask.access$600(AsyncTask.java:177)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.os.Handler.dispatchMessage(Handler.java:99)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.os.Looper.loop(Looper.java:137)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at java.lang.reflect.Method.invoke(Method.java:511)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-31 10:46:52.403: E/AndroidRuntime(1022): 	at dalvik.system.NativeStart.main(Native Method)
07-31 10:47:03.142: I/Process(1022): Sending signal. PID: 1022 SIG: 9
07-31 10:47:04.812: E/Trace(1644): error opening trace file: No such file or directory (2)
Добавлено через 24 минуты
Так сделал, пишет "Сбой разбора пакета":
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
protected void onPostExecute(File file) {
            // отображаем сообщение, если возникла ошибка
            if (m_error != null) {
             m_error.printStackTrace();
             return;
            }
            // закрываем прогресс и удаляем временный файл
            progressDialog.hide();
            //file.delete();
            
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(file),
                    "application/vnd.android.package-archive");
            startActivity(intent);
            
           }
          }.execute(url);
         }
Добавлено через 26 минут
Еще раз переделал, всеравно сбой разбора пакета:
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
private void downloadFile(String url) {
          final ProgressDialog progressDialog = new ProgressDialog(this);
         
          new AsyncTask<String, Integer, File>() {
           private Exception m_error = null;
         
           @Override
           protected void onPreExecute() {
            progressDialog.setMessage("Downloading ...");
            progressDialog.setCancelable(false);
            progressDialog.setMax(100);
            progressDialog
              .setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
         
            progressDialog.show();
           }
         
           @Override
           protected File doInBackground(String... params) {
            URL url;
            HttpURLConnection urlConnection;
            InputStream inputStream;
            int totalSize;
            int downloadedSize;
            byte[] buffer;
            int bufferLength;
         
            File file = null;
            FileOutputStream fos = null;
         
            try {
             url = new URL(params[0]);
             urlConnection = (HttpURLConnection) url.openConnection();
         
             urlConnection.setRequestMethod("GET");
             urlConnection.setDoOutput(true);
             urlConnection.connect();
         
             file = File.createTempFile("aapfromurl", ".apk");
             fos = new FileOutputStream(file);
             inputStream = urlConnection.getInputStream();
         
             totalSize = urlConnection.getContentLength();
             downloadedSize = 0;
         
             buffer = new byte[1024];
             bufferLength = 0;
         
             // читаем со входа и пишем в выход, 
             // с каждой итерацией публикуем прогресс
             while ((bufferLength = inputStream.read(buffer)) > 0) {
              fos.write(buffer, 0, bufferLength);
              downloadedSize += bufferLength;
              publishProgress(downloadedSize, totalSize);
             }
         
             fos.close();
             inputStream.close();
         
             return file;
            } catch (MalformedURLException e) {
             e.printStackTrace();
             m_error = e;
            } catch (IOException e) {
             e.printStackTrace();
             m_error = e;
            }
         
            return null;
           }
         
           // обновляем progressDialog
           protected void onProgressUpdate(Integer... values) {
            progressDialog
              .setProgress((int) ((values[0] / (float) values[1]) * 100));
           };
         
           @Override
           protected void onPostExecute(File file) {
            // отображаем сообщение, если возникла ошибка
            if (m_error != null) {
             m_error.printStackTrace();
             return;
            }
            // закрываем прогресс и удаляем временный файл
            progressDialog.hide();
            //file.delete();
 
 
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
            startActivity(intent);
            
           }
          }.execute(url);
         }
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.07.2013, 23:52     Загрузка файла из сети, и его выполнение #4
Цитата Сообщение от Sanu0074 Посмотреть сообщение
сбой разбора пакета:
что?
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
01.08.2013, 00:01  [ТС]     Загрузка файла из сети, и его выполнение #5
Цитата Сообщение от V0v1k Посмотреть сообщение
что?
Завершается загрузка, progresDialog закрывается и при запуске файла выдается такое сообщение (на телефоне запускаю).
p.s. Подобные ошибки бывают когда файл недокачан или криво скачан и потом пытамся его запустить, либо может возникнуть когда мало памяти в устройсве, но а моем случае - не могу разобраться...
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.08.2013, 00:09     Загрузка файла из сети, и его выполнение #6
никогда не видер русских сообщений об ошибках от андроида, тем более в логах.
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
01.08.2013, 00:15  [ТС]     Загрузка файла из сети, и его выполнение #7
Цитата Сообщение от V0v1k Посмотреть сообщение
никогда не видер русских сообщений об ошибках от андроида, тем более в логах.
Это не в логах, а при запуске скачанного файла

Добавлено через 47 секунд
Я думаю может надо его сохранить куданибудь на SD карту, а то он тут как временный файл....

Добавлено через 22 секунды
Как это сделать правильно? (может тогда заработает)
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.08.2013, 00:16     Загрузка файла из сети, и его выполнение #8
если логи такие как выше, то это значит, что на вашем устройстве нет активити которая может обрабатывать такой запрос.
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
01.08.2013, 00:22  [ТС]     Загрузка файла из сети, и его выполнение #9
Цитата Сообщение от V0v1k Посмотреть сообщение
если логи такие как выше, то это значит, что на вашем устройстве нет активити которая может обрабатывать такой запрос.
Ну так в чем тогда проблема может быть? Как правильно сохранить этот файл который из сети грузится на sd карту?
Может тот файл не имеет нужное расширение.....
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.08.2013, 00:27     Загрузка файла из сети, и его выполнение #10
вы на эмуляторе запускаете?
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
01.08.2013, 00:41  [ТС]     Загрузка файла из сети, и его выполнение #11
Теперь все работает, это:

Java
1
file = File.createTempFile("aapfromurl", ".apk");
Заменил на это:

Java
1
2
file = new File(Environment.getExternalStorageDirectory() + File.separator + "aapfromurl.apk");
             file.createNewFile();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 17:45     Загрузка файла из сети, и его выполнение
Еще ссылки по теме:
Загрузка файла в файловую систему эмклятора Android
Android Получение контента из удалённого файла и вывод его в Toast
Android Выбор файла и переключение на другую активити для его открытия
Android Как с ListFragment передать имя файла чтобы открыть его в другом Активити?
Несколько фонов для приложения. Как загружать каждый по его номеру в имени файла Android

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

Или воспользуйтесь поиском по форуму:
PlayaRC
5 / 5 / 0
Регистрация: 10.03.2012
Сообщений: 121
17.03.2014, 17:45     Загрузка файла из сети, и его выполнение #12
а у меня дальше строчки
Java
1
inputStream = urlConnection.getInputStream();
код не выполняется! в чем может быть проблема??
заранее спасибо

весь код:
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package com.app;
 
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Debug;
import android.os.Environment;
import android.text.Editable;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class NewDownload extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.new_download);
 
        final EditText _newDownloadURL = (EditText) findViewById(R.id.newFileURL);
 
        Button _okButton = (Button) findViewById(R.id.applyNewURL);
        _okButton.setOnClickListener(new OnClickListener() {
 
            @Override
        public void onClick(View v) {
                String val = "http://www.muz-baza.net/Mobilaringtone/2013music/35-irina_krug-vydumki_v_letnem_sadu.mp3";
                if (val != null)
                {
                    downloadFile(val);
                }
            }
        });
    }
    
    private void downloadFile(String url) {
        final ProgressDialog progressDialog = new ProgressDialog(this);
       
        new AsyncTask<String, Integer, File>() {
         private Exception m_error = null;
       
         @Override
         protected void onPreExecute() {
          progressDialog.setMessage("Downloading ...");
          progressDialog.setCancelable(false);
          progressDialog.setMax(100);
          progressDialog
            .setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
       
          progressDialog.show();
         }
       
         @Override
         protected File doInBackground(String... params) {
          URL url;
          HttpURLConnection urlConnection;
          InputStream inputStream;
          int totalSize;
          int downloadedSize;
          byte[] buffer;
          int bufferLength;
       
          File file = null;
          FileOutputStream fos = null;
       
          try {
           url = new URL(params[0]);
           urlConnection = (HttpURLConnection) url.openConnection();
       
           urlConnection.setRequestMethod("GET");
           urlConnection.setDoOutput(true);
           urlConnection.connect();
       
           //file = File.createTempFile("aapfromurl", ".mp3");
           file = new File(Environment.getExternalStorageDirectory() + File.separator + "aapfromurl.mp3");
           file.createNewFile();
           fos = new FileOutputStream(file);
           Log.e("url", fos.toString()+" bah");
           inputStream = urlConnection.getInputStream();
       
           Log.e("url", "inputStream "+urlConnection.getInputStream().toString());
           totalSize = urlConnection.getContentLength();
           Log.e("url", "after totalSize");
           downloadedSize = 0;
       
           buffer = new byte[1024];
           bufferLength = 0;
       
           Log.e("url", "before while");
           // читаем со входа и пишем в выход, 
           // с каждой итерацией публикуем прогресс
           while ((bufferLength = inputStream.read(buffer)) > 0) {
            fos.write(buffer, 0, bufferLength);
            downloadedSize += bufferLength;
            publishProgress(downloadedSize, totalSize);
           }
       
           fos.close();
           inputStream.close();
       
           return file;
          } catch (MalformedURLException e) {
           e.printStackTrace();
           m_error = e;
          } catch (IOException e) {
           e.printStackTrace();
           m_error = e;
          }
       
          return null;
         }
       
         // обновляем progressDialog
         protected void onProgressUpdate(Integer... values) {
          progressDialog
            .setProgress((int) ((values[0] / (float) values[1]) * 100));
         };
       
         @Override
         protected void onPostExecute(File file) {
          // отображаем сообщение, если возникла ошибка
          if (m_error != null) {
           m_error.printStackTrace();
           return;
          }
          // закрываем прогресс и удаляем временный файл
          progressDialog.hide();
          //file.delete();
          
         }
        }.execute(url);
       }
}
Yandex
Объявления
17.03.2014, 17:45     Загрузка файла из сети, и его выполнение
Ответ Создать тему
Опции темы

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