3

Пользователь может добавить любое количество загрузок, но загрузка начнется один за другим i.e. Следующая загрузка начнется только после завершения текущей загрузки. Пользователь будет перемещаться от активности, показывающей процесс загрузки, чтобы добавить новые загрузки, и когда добавляется новый файл для загрузки, приложение переходит к активности, показывающей ход загрузки, где будет отображаться ход загрузки, ранее добавлен, и сохраните добавленный файл в ожидании загрузки. Как только загрузка завершится, в ожидании загрузки начнется загрузка. Таким образом, пользователь может добавить любое количество загрузок, и они будут запускаться один за другим. Я хочу загрузить их последовательно в фоновом режиме - один за другим. Я хочу показать прогресс и статус в ListView. Так, ListView выглядит следующим образом:Android Загрузить несколько файлов один за другим и показать прогресс в ListView

File1 ... Незавершенное говорят 39%

File2 .... В ожидании

file3 ... В ожидании

file4 ... В ожидании

+0

думать об использовании AsyncTask, но не знаю, как начать прогресс бар для следующего ожидающего загрузки после того, как настоящее загрузка завершена. А также как обновить индикатор выполнения, как только пользователь перейдет к другому действию, чтобы добавить новую загрузку. – user2416657

ответ

1

я предложил бы использовать IntentServices:

public class FileDownloader extends IntentService { 

private static final String TAG = FileDownloader.class.getName(); 



public FileDownloader() { 
    super("FileDownloader"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    String fileName = intent.getStringExtra("Filename"); 
    String folderPath = intent.getStringExtra("Path"); 
    String callBackIntent = intent 
      .getStringExtra("CallbackString"); 

    // Code for downloading 

    // When you want to update progress call the sendCallback method 

} 

private void sendCallback(String CallbackString, String path, 
     int progress) { 

     Intent i = new Intent(callBackIntent); 
     i.putExtra("Filepath", path); 
     i.putExtra("Progress", progress); 
     sendBroadcast(i); 

} 

} 

Затем, чтобы начать загрузку файла Просто сделать:

Intent i = new Intent(context, FileDownloader.class); 
i.putExtra("Path", folderpath); 
i.putExtra("Filename", filename); 
i.putExtra("CallbackString", 
      "progress_callback"); 
startService(i); 

Теперь вы должны обращаться с «progress_callback» обратным вызовом, как вы бы с любыми другими передачами, регистрируя приемник и т.д. В этом примере, используя FilePath, чтобы определить, какой файл должен иметь это прогресс визуального обновленный ,

Не забудьте зарегистрировать услугу в манифесте.

<service android:name="yourpackage.FileDownloader" /> 

Примечание:

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

Использование 'CallbackString'

Вы можете использовать его, как это в вашей деятельности:

private BroadcastReceiver receiver; 

@Overrride 
public void onCreate(Bundle savedInstanceState){ 

    // your oncreate code 

    // starting the download service 

    Intent i = new Intent(context, FileDownloader.class); 
    i.putExtra("Path", folderpath); 
    i.putExtra("Filename", filename); 
    i.putExtra("CallbackString", 
      "progress_callback"); 
    startService(i); 

    // register a receiver for callbacks 
    IntentFilter filter = new IntentFilter("progress_callback"); 

    receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //do something based on the intent's action 
     Bundle b = intent.getExtras(); 
     String filepath = b.getString("Filepath"); 
     int progress = b.getInt("Progress"); 
     // could be used to update a progress bar or show info somewhere in the Activity 
    } 
    } 
    registerReceiver(receiver, filter); 
} 

Не забудьте запустить это в onDestroy метод:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    unregisterReceiver(receiver); 
} 

Отметим, что " progress_callback "может быть любой другой Строкой по вашему выбору.

Пример кода заимствована из Programmatically register a broadcast receiver

+0

Не могли бы вы предоставить дополнительную информацию о CallbackString? Что на самом деле и как я должен его использовать? –

+0

@piavgh попытались обновить ответ – cYrixmorten

 Смежные вопросы

  • Нет связанных вопросов^_^