Android DownloadManager.ERROR_FILE_ERROR
Я загружаю большие zip-файлы с помощью Android DownloadManager. У меня есть просмотр списка, который показывает список всех zip-файлов, и пользователь может нажать элемент, чтобы начать загрузку. Только один элемент может быть загружен за один раз. Когда новый элемент списка начинает загружаться во время выполнения другой загрузки, я удаляю предыдущий идентификатор загрузки из очереди. Все работает нормально. Но иногда я получаю ERROR_FILE_ERROR на устройстве LG g2 OS 5.0.2. Вот код:
Uri uri = Uri.parse(path);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverRoaming(false);
request.setVisibleInDownloadsUi(false);
String localStorageBasePath = FileUtils.zipDirectory(context).getAbsolutePath() + File.separator + fileName;
Uri localStorageBasePathUri = Uri.fromFile(new File(localStorageBasePath));
request.setDestinationUri(localStorageBasePathUri);
Long downloadId = downloadManager.enqueue(request);
Он отлично работает на других устройствах, включая Nexus 5, Samsung S3, Note2, Huawei и т. Д. Когда я начинаю загрузку файла, он мгновенно останавливается / не удается по причине DownloadManager.ERROR_FILE_ERROR. Я попытался удалить / очистить каталог внешнего хранилища, убедившись, что это не ошибка ERROR_INSUFFICIENT_SPACE и т. Д., Но это не сработало. Любая помощь?
1 ответ
Это может быть немного более пуленепробиваемым:
public void file_download(String path, String filename)
{
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs();
Uri uri = Uri.parse(path);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setDescription("");
request.setTitle("");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverRoaming(false);
request.setVisibleInDownloadsUi(false);
request.setDestinationInExternalFilesDir(context, DIRECTORY_DOWNLOADS, fileName);
//String localStorageBasePath = FileUtils.zipDirectory(context).getAbsolutePath() + File.separator + fileName;
//Uri localStorageBasePathUri = Uri.fromFile(new File(localStorageBasePath));
//request.setDestinationUri(localStorageBasePathUri);
DownloadManager downloadManager = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE);
Long downloadId = downloadManager.enqueue(request);
}