我的应用程序上有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);
}
顺便说一下,如果你发现方法有任何问题,请告诉我。 提前谢谢。
答案 0 :(得分:0)
我知道这已经过时了,但是遇到同样问题的人:你需要做什么,就是在另一个线程中开始下载。
由于android不是线程教授,你需要使用AsyncTask。 AsyncTask与线程非常相似。通过启动和使用一个,你可以做一些相当长的操作而不冻结ui。 (请注意,对于需要几秒钟而非几分钟的操作,建议使用AsyncTasks。在这种情况下,您需要查找其他内容)
启动AsyncTask,然后下载文件。问题是AsyncTasks无法访问ui方法,因此无法更改线程。 幸运的是,你可以覆盖他们更新ui所需的方法,并直接从它的onExecute中调用它。
有关此问题的许多教程都可以在网上找到。