使用api 9下载时加载Android DownloadManager

时间:2013-12-25 19:00:48

标签: android loading android-download-manager

我的应用程序上有5个大文本文件,每个文件大约40kb。这些文件每周在网站上更新。 我设法设置downloadManager从网站下载5个文件。问题是我不希望用户在下载文件时能够使用该应用程序,因为这会导致问题。 我希望当用户点击“更新”按钮时,它会显示一个加载框。然后,当文件完成下载时,该框将消失,并且祝酒词将显示“已更新”。 这是我设置的方法:

@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);
}

顺便说一下,如果你发现方法有任何问题,请告诉我。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我知道这已经过时了,但是遇到同样问题的人:你需要做什么,就是在另一个线程中开始下载。

由于android不是线程教授,你需要使用AsyncTask。 AsyncTask与线程非常相似。通过启动和使用一个,你可以做一些相当长的操作而不冻结ui。 (请注意,对于需要几秒钟而非几分钟的操作,建议使用AsyncTasks。在这种情况下,您需要查找其他内容)

启动AsyncTask,然后下载文件。问题是AsyncTasks无法访问ui方法,因此无法更改线程。 幸运的是,你可以覆盖他们更新ui所需的方法,并直接从它的onExecute中调用它。

有关此问题的许多教程都可以在网上找到。