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

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

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

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

30.07.2013, 21:17. Просмотров 3834. Ответов 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();
запустить файл....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 21:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Загрузка файла из сети, и его выполнение (Программирование Android):

Загрузка файла из сети интернет - Программирование Android
Добрый день. Я, после большого перерыва, вернулся к своему проекту. Нашел примеры как скачивать файл из интернета. Вот как я это...

Загрузка изображений из сети в ListView - Программирование Android
Здравствуйте. Имеется файл в JSON формате. В нем дан массив объектов, каждый объект содержит поле &quot;name&quot; и поле &quot;image&quot;, в котором указан...

Загрузка Audio и Video в ListView из сети Интернет - Программирование Android
Как загружать Audio и Video в ListView из сети Интернет, с последующим воспроизведением?

Загрузка и выполнение данных из файла. - JavaScript
Есть такая прабла. У меня есть список, при выборе 'Часть 3' в нем, в документ загружается файл, в котором лежат новые &lt;option&gt; для...

Загрузка файла в ТекстБокс и открытие файла, зная его полный путь! - Visual Basic
Всем привет! Имеется определенная проблема: ввожу в textbox полный путь к файлу, после сохраняю его с помощью кода: Dim FN as...

Создание файла с кодом и его выполнение - C++ Qt
Задача:в QT нужно создать приложение в котором можно будет писать и сохранять код для 3-х кнопок. Т.е. после его запуска доступно первое...

11
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.07.2013, 00:50 #2
какая ошибка вылетает?
0
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);
         }
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.07.2013, 23:52 #4
Цитата Сообщение от Sanu0074 Посмотреть сообщение
сбой разбора пакета:
что?
0
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
01.08.2013, 00:01  [ТС] #5
Цитата Сообщение от V0v1k Посмотреть сообщение
что?
Завершается загрузка, progresDialog закрывается и при запуске файла выдается такое сообщение (на телефоне запускаю).
p.s. Подобные ошибки бывают когда файл недокачан или криво скачан и потом пытамся его запустить, либо может возникнуть когда мало памяти в устройсве, но а моем случае - не могу разобраться...
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.08.2013, 00:09 #6
никогда не видер русских сообщений об ошибках от андроида, тем более в логах.
0
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
01.08.2013, 00:15  [ТС] #7
Цитата Сообщение от V0v1k Посмотреть сообщение
никогда не видер русских сообщений об ошибках от андроида, тем более в логах.
Это не в логах, а при запуске скачанного файла

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

Добавлено через 22 секунды
Как это сделать правильно? (может тогда заработает)
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.08.2013, 00:16 #8
если логи такие как выше, то это значит, что на вашем устройстве нет активити которая может обрабатывать такой запрос.
1
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
01.08.2013, 00:22  [ТС] #9
Цитата Сообщение от V0v1k Посмотреть сообщение
если логи такие как выше, то это значит, что на вашем устройстве нет активити которая может обрабатывать такой запрос.
Ну так в чем тогда проблема может быть? Как правильно сохранить этот файл который из сети грузится на sd карту?
Может тот файл не имеет нужное расширение.....
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.08.2013, 00:27 #10
вы на эмуляторе запускаете?
1
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();
1
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);
       }
}
0
17.03.2014, 17:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 17:45
Привет! Вот еще темы с ответами:

Загрузка файла из сети с определенной позиции - C#
Каким образом можно скачать файл из сети с нужного места? У меня есть код: HttpWebRequest request =...

Загрузка файла из интернета и его использование. - C#
В общем дело обстоит так: При нажатии на баттон1 должен начаться скачивать файл.Сохранится он по умолчанию в windows. Но в этом файле...

Программное открытие файла через ListBox и его загрузка - Delphi
Привет, уважаемые программисты. Вот работаю над программой, но не получается её закончить. Процедуры такой: procedure...

Загрузка файла через URL и сохранение его в IsolatedStorage - Windows Phone
Совственно задача простая. Есть прямая ссылка на файл. Этот файл нужно загрузить в IsolatedStorage. Для получения stream использую...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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