Скачивайте файл как Android Market - PullRequest
4 голосов
/ 18 ноября 2011

Я собираюсь реализовать функцию, которая будет загружать большой файл (около 50 МБ) в фоновом режиме.

Я бы хотел сделать это как Android Market - я имею в виду, что когда пользователь начнет загружать файл, он будет отображаться в строке состояния со всем этим индикатором выполнения и уведомлять мое приложение о завершении работы.

Не могли бы вы дать мне несколько советов? Я знаю, что мой вопрос не высокого качества, но раньше я проводил исследования, и у меня просто нет ключевых слов для поиска какого-либо решения.

Ответы [ 2 ]

7 голосов
/ 18 ноября 2011

Это всего лишь небольшой обзор, чтобы дать вам несколько ключевых слов.

Прежде всего, как создать уведомление должно быть довольно простым и хорошо задокументировано. Если вы не знаете, как создать обычное уведомление, ознакомьтесь с Уведомления в строке состояния .

Следующим шагом является создание уведомления с пользовательским макетом, содержащим ProgressBar (так как для этого afaik нет предварительно созданного макета) , который также задокументирован на той же странице . После того, как вы создали для этого Notification экземпляр, вы должны сохранить ссылку и использовать ее для обновления вашего ProgressBar через

notification.contentView.setProgressBar(R.id.yourprogressbar, 100, 42, false);
nm.notify(notificationId, notification);

nm является здесь ссылкой NotificationManager, также см. RemoteViews.setProgressBar ()

Это в основном UI-сторона вещей. Для фактической загрузки файла в фоновом режиме вы должны использовать Сервис , который использует AsyncTask (поскольку сервисы запускаются в потоке пользовательского интерфейса - имя часто вводит в заблуждение) . Вы можете использовать AsyncTask.publishProgress() для отправки обновлений о прогрессе загрузки в UI-поток и обновления индикатора выполнения внутри AsyncTask.onProgressUpdate().

3 голосов
/ 18 ноября 2011

В дополнение к ответу @ alextsc, если вы поддерживаете только API уровня 9 и выше, вы можете использовать DownloadManager, который обрабатывает все это для вас, включая такие детали, как изменения подключения (например,wifi-> 3G).Но это доступно только на Android 2.3 +.

...