2013-12-25 2 views
0

Мое приложение имеет 5 больших текстовых файлов на них, каждый около 40kb. Эти файлы обновляются еженедельно на веб-сайте. Мне удалось установить downloadManager, чтобы загрузить 5 файлов с сайта. Проблема в том, что я не хочу, чтобы пользователь мог использовать приложение во время загрузки файлов, потому что это вызовет проблемы. Я хочу, чтобы, когда пользователь нажимает кнопку «Обновить», появится окно загрузки. Затем, когда файлы закончат загрузку, окно исчезнет, ​​и тост скажет «Обновлено». Это метод, я создал:Загрузка DownloadManager для Android при загрузке с помощью api 9

@SuppressLint("NewApi") 
public void DownloadTxtFile(String url, String fileName) { 
    if (!new File(Environment.getExternalStorageDirectory() 
      + "/folder").exists()) { 
     new File(Environment.getExternalStorageDirectory() 
       + "/Dovahzul_Dictionary").mkdirs(); 
    } 
    File file = new File(extStore.getAbsolutePath() 
      + "/folder/" + fileName); 
    DownloadManager.Request request = new DownloadManager.Request(
      Uri.parse(url)); 
    request.setDescription("Downloading Text Files..."); 
    request.setTitle("Updating") 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     request.allowScanningByMediaScanner(); 
     request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
    } 
    request.setDestinationInExternalPublicDir("/Dovahzul_Dictionary", 
      fileName); 
    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
    if (file.exists()) { 
     file.delete(); 
    } else { 
    } 
    manager.enqueue(request); 
} 

Кстати, если вы обнаружите какие-либо проблемы с методом, Plase сообщить мне, как хорошо. Спасибо заранее.

+0

Итак, в чем ваш вопрос? – Squonk

+0

@Squonk Извините, если бы не было ясно. Как название sugests, я хочу показать небольшое окно в середине экрана с надписью «Обновление», «Загрузка», «Загрузка» или что-то еще, а затем исчезнуть после завершения загрузки. Таким образом, пользователь не будет использовать приложение во время загрузки приложения. – Fowlron

ответ

0

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

Поскольку андроид не является профилем, вам нужно использовать AsyncTask. AsyncTask очень похожа на поток. Путем запуска и использования одного из них вы можете выполнять довольно длительные операции без замораживания ui. (Обратите внимание, что AsyncTasks рекомендуются для операций, которые занимают секунды, а не минуты. В этом случае вам нужно найти что-то еще)

Вы запускаете AsyncTask и загружаете файл. Проблема в том, что AsyncTasks не может обращаться к ui-методам, поэтому они не могут изменять потоки. Вы можете, к счастью, переопределить метод, который им нужно обновить ui, и вызвать его непосредственно из него onExecute.

Многие учебники по этому вопросу можно найти в Интернете.

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