Вопрос по download, notifications, android, android-asynctask – Android: загрузите файл с сервера и покажите ход загрузки в панели уведомлений, используя AsyncTask

9

Я использую этопример загрузить файл с сервера, используяAsycTask и показать загруженный прогресс в панели уведомлений. Я только что изменилdoInBackground метод, чтобы загрузить мой файл:

@Override
    protected Void doInBackground(String... Urls) {
        //This is where we would do the actual download stuff
        //for now I'm just going to loop for 10 seconds
        // publishing progress every second
        try {   
            URL url = new URL(Urls[0]);
            URLConnection connection = url.openConnection();
            connection.connect();
            // this will be useful so that you can show a typical 0-100%
            // progress bar
            int fileLength = connection.getContentLength();

            // download the file
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream( _context.getFilesDir() + "/file_name.apk");

            byte data[] = new byte[1024];
            long total = 0;
            int count;
            while ((count = input.read(data)) != -1) {
                total += count ;
                // publishing the progress....
                publishProgress((int) (total * 100 / fileLength));
                output.write(data, 0, count);
            }
            output.flush();
            output.close();
            input.close();      
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }


protected void onPreExecute() {
        // Create the notification in the statusbar
        mNotificationHelper.createNotification();
    }


protected void onPostExecute(Void result) {
        // The task is complete, tell the status bar about it
        mNotificationHelper.completed();
    }

protected void onProgressUpdate(Integer... progress) {
        // This method runs on the UI thread, it receives progress updates
        // from the background thread and publishes them to the status bar
        mNotificationHelper.progressUpdate(progress[0]);
    }

Все идет хорошо, за исключением того, что я не могу опустить панель уведомлений. Зачем?

Мой вопрос был отредактирован. b.i
Проверено на разных устройствах, всегда одна и та же проблема. b.i
Благодарю. я взгляну. Вы тестировали его на другом устройстве или на эмуляторе? Кажется, это очень странная проблема. pogo2065
Не могли бы вы опубликовать ваши методы onPreExecute и onPostExecute? pogo2065
Конечно я буду... b.i

Ваш Ответ

2   ответа
2

onProgressUpdate способ обновить ваш интерфейс.

Я делаю это: protected void onProgressUpdate (Integer ... progress) {// Этот метод выполняется в потоке пользовательского интерфейса, он получает обновления прогресса // из фонового потока и публикует их в строке состояния mNotificationHelper.progressUpdate (progress [0 ]); } .... Но проблема в том, что я не могу опустить или поднять панель уведомлений. b.i
не имеет отношения к вопросу
4

can you please put an sleep(1000) method before publishProgress and check. just a guess

-

yes, it works, but the download is slowing

Надеюсь, вы поняли проблему. Поскольку вы очень часто обновляете панель уведомлений, вы не можете ее снять. Вы можете избежать этой проблемы, увеличив размер фрагмента данных или обновив индикатор выполнения на каждые 4 или более КБ вместо 1 КБ.

Выше не будет замедлять загрузку данных.

полностью согласен. Бесполезно так много сообщать о прогрессе. Я бы, вероятно, использовал буфер 16 КБ.
Хорошо, спасибо, надеюсь, кто-то поделится причиной .. b.i

Похожие вопросы