одновременная загрузка файлов - лучший способ справиться с этим

1

Я пишу прикладной таргетинг API уровня 9 или выше. Так что я решили пойти с DownloadManager Class, который предлагает SDK. Мой вопрос - 2 части - 1. Когда я загружаю один файл, как я показываю прогресс загрузки. Я вижу, я могу получить COLUMN_TOTAL_SIZE_BYTES и COLUMN_BYTES_DOWNLOADED_SO_FAR из запроса менеджера загрузки пример. Но я не уверен, что мне нужно поставить запрос в поток и реализовать цикл, чтобы я мог регулярно опроса, чтобы обновить прогресс бар. Я думаю, я не уверен, как запросить регулярно - будет ли он основной поток или быть реализованным как runnable - механизм я не ясно. 2. Если мне нужно поддерживать несколько загрузок файлов, тогда я должен запускать каждый из них в свою собственную нить? Спасибо.

Теги:

1 ответ

0

Если вы строите на 2.3 и выше, вам это не нужно, оно автоматически отображает его в строке состояния. Делай это так, Код из общедоступного контента,

    private static final int DOWNLOAD_SUCCESSFUL = 100;
private static final int DOWNLOAD_FAILED = 99;
    private DownloadManager mgr=null;

для создания сделать это,

`mgr = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);    

        registerReceiver(onComplete,
                 new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

`

Затем в событии щелчка загрузки файла

lastDownload = mgr.enqueue(new DownloadManager.Request(uri) .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE) .setAllowedOverRoaming(false) .setTitle("Test File") .setDescription("Download zipped file.") .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, file_name));

И затем широковещательный приемник, когда ваши донгрузы компилируются,

BroadcastReceiver onComplete=new BroadcastReceiver() {
        public void onReceive(Context ctxt, Intent intent) {

            findViewById(R.id.start).setEnabled(true);  

            File unzipFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),file_name);            

            //check for new file download
            //extract if it a new download

            if (unzipFile.exists()) {
                new UnzipFile().execute();              
            } else {
                Toast.makeText(Main.this, "Download not found!", Toast.LENGTH_LONG).show();
            }           
        }
    };`
  • 0
    На HoneyComb я вижу только одну загрузку (активную загрузку) в строке состояния. На устройстве Android 2.3.3 я вижу общее количество загрузок в строке состояния, но в строке состояния отображается только одна (или иногда 2) активная строка прогресса загрузки. Я бы предпочел показывать индикатор выполнения на каждой моей загрузке. Клиент может загружать до 4 или 5 файлов одновременно. Какие-либо предложения? Благодарю.
  • 0
    Затем вы должны сделать это вручную, проверяя размер файлов и фактическую сумму передачи каждого файла. Я предлагаю сделать это в службе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню