Я знаю, что мы можем использовать встроенный менеджер загрузок в Android 2.3 и выше, но мое приложение подходит для Android 2.2 и выше. Мой вопрос в том, как создать собственный менеджер загрузок в Android 2,2? пожалуйста, предоставьте мне несколько ответов.Как создать собственный менеджер загрузок в android 2.2
ответ
, пожалуйста, предоставьте мне пример ответа.
Step1 Посмотрите для примера на Как загрузить файлы в Android
Шаг 2 Посмотрите для примера о том, как выполнять операции в AsyncTask.
Шаг3 Посмотрите пример того, как отображать результаты загрузки во время загрузки.
Step4 Посмотрите для примера о том, как отправить Выборочную Broadcast, когда задача выполнена
Step5 Посмотрите для примера на Как Упорство операции AsysncTask даже при повороте устройства
step6 Посмотрите на пример того, как показать прогресс загрузки в уведомлении.
Ниже приведен пример кода.
1. Используйте AsyncTask и показать ход загрузки в диалоговом
// declare the dialog as a member field of your activity
ProgressDialog mProgressDialog;
// instantiate it within the onCreate method
mProgressDialog = new ProgressDialog(YourActivity.this);
mProgressDialog.setMessage("A message");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// execute this when the downloader must be fired
DownloadFile downloadFile = new DownloadFile();
downloadFile.execute("the url to the file you want to download");
The AsyncTask will look like this:
// usually, subclasses of AsyncTask are declared inside the activity class.
// that way, you can easily modify the UI thread from here
private class DownloadFile extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... sUrl) {
try {
URL url = new URL(sUrl[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("/sdcard/file_name.extension");
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) {
}
return null;
}
выше метод (doInBackground) работает всегда в фоновом потоке. Вы не должны выполнять какие-либо задачи пользовательского интерфейса. С другой стороны, onProgressUpdate и onPreExecute работать в потоке пользовательского интерфейса, так что вы можете изменить индикатор:
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog.show();
}
@Override
protected void onProgressUpdate(Integer... progress) {
super.onProgressUpdate(progress);
mProgressDialog.setProgress(progress[0]);
}
}
2. Скачать с Service
Большой вопрос состоит в следующем: как сделать Я обновляю свою активность из службы ?. В следующем примере мы собираемся использовать два класса, о которых вы, возможно, не знаете: ResultReceiver и IntentService. ResultReceiver - это тот, который позволит нам обновить наш поток из службы; IntentService - это подкласс Сервиса, который генерирует поток для выполнения фоновой работы (вы должны знать, что Служба работает на самом деле в том же потоке вашего приложения, когда вы расширяете Сервис, вы должны вручную создавать новые потоки для выполнения операций блокировки ЦП) ,
Скачать Сервис может выглядеть следующим образом:
public class DownloadService extends IntentService {
public static final int UPDATE_PROGRESS = 8344;
public DownloadService() {
super("DownloadService");
}
@Override
protected void onHandleIntent(Intent intent) {
String urlToDownload = intent.getStringExtra("url");
ResultReceiver receiver = (ResultReceiver) intent.getParcelableExtra("receiver");
try {
URL url = new URL(urlToDownload);
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("/sdcard/BarcodeScanner-debug.apk");
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
Bundle resultData = new Bundle();
resultData.putInt("progress" ,(int) (total * 100/fileLength));
receiver.send(UPDATE_PROGRESS, resultData);
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (IOException e) {
e.printStackTrace();
}
Bundle resultData = new Bundle();
resultData.putInt("progress" ,100);
receiver.send(UPDATE_PROGRESS, resultData);
}
}
Добавить услугу в манифесте:
<service android:name=".DownloadService"/>
И деятельность будет выглядеть следующим образом:
// инициализировать диалог выполнения как в первом примере
// это то, как вы запускаете загрузчик
mProgressDialog.show();
Intent intent = new Intent(this, DownloadService.class);
intent.putExtra("url", "url of the file to download");
intent.putExtra("receiver", new DownloadReceiver(new Handler()));
startService(intent);
Здесь есть были ResultReceiver приходит играть:
private class DownloadReceiver extends ResultReceiver{
public DownloadReceiver(Handler handler) {
super(handler);
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData);
if (resultCode == DownloadService.UPDATE_PROGRESS) {
int progress = resultData.getInt("progress");
mProgressDialog.setProgress(progress);
if (progress == 100) {
mProgressDialog.dismiss();
}
}
}
}
- 1. Менеджер загрузок Android завершен
- 2. Как использовать встроенный менеджер загрузок на Android
- 3. Как создать собственный менеджер для связанных объектов?
- 4. Выборочный менеджер загрузок в Moodle
- 5. Собственный пользовательский менеджер по политике Android
- 6. Как создать собственный языковой пакет для Android?
- 7. Как создать ActionBar в версии Android 2.2?
- 8. Android: Как создать собственный EventListener?
- 9. Создать собственный адаптер в Android?
- 10. Менеджер загрузок, который может продолжить скачивание
- 11. Как создать собственный интерфейс Listener в android?
- 12. Как создать собственный список контактов в Android
- 13. Как создать свой собственный класс в Android?
- 14. Напишите свой собственный менеджер памяти
- 15. Android создать собственный Reader PDF
- 16. Как создать пользовательский стек для Android 2.2 или 2.3
- 17. Android создать собственный View & Field
- 18. Как создать собственный тост
- 19. Как создать собственный просмотрщик PDF для Android?
- 20. Как получить уведомление, когда менеджер загрузок закончит все загрузки
- 21. Android Market - большой пакет загрузок
- 22. Android-менеджер-менеджер-собственная ошибка
- 23. AVD-менеджер не смог создать виртуальное устройство
- 24. Невозможно скомпилировать с Android 2.2
- 25. Как создать маленькие кнопки с большим текстом в Android 2.2?
- 26. Как создать собственный счетчик?
- 27. Как создать собственный кодер?
- 28. Как создать файловый менеджер, как в MediaFire
- 29. Как создать собственный sap.suite.ui.generic.template.ObjectPage
- 30. Как создать собственный UIPickerView?
Спасибо за ответ. Я попробую это. –
Если он решает вашу проблему, не забудьте принять ответ, поскольку он поможет другим пользователям, –