DownloadManager отправляет STATUS_SUCCESSFUL для неудачной загрузки

Хорошо, я загружаю файлы (изображения). Я хочу отправить сообщение с локальным URI для изображения, когда загрузка будет завершена. Но 20% времени я получаю это:

6-01 18:46:39.900: INFO/DownloadManager(412): Initiating request for download 605
06-01 18:46:39.910: WARN/DownloadManager(412): Aborting request for download 605: Trying to resume a download that can't be resumed
06-01 18:46:39.910: INFO/ololo(2826): Okay, I'll broadcast.
06-01 18:46:39.990: WARN/ImageView(2826): Unable to open content: content://downloads/my_downloads/605
    java.io.FileNotFoundException: No filename found.
    at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:145)...
06-01 18:46:39.990: INFO/System.out(2826): resolveUri failed on bad bitmap uri: content://downloads/my_downloads/605
06-01 18:46:39.990: INFO/ololo(2826): content://downloads/my_downloads/605 was set for [email protected]

Вот код

Long downloadId = downloadIds.get(this);

if(downloadId == intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1)) {
    DownloadManager.Query query = new DownloadManager.Query();
    query.setFilterById(downloadId);
    Cursor cursor = downloadManager.query(query);

    if(cursor.moveToFirst()) {

        switch (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS))) {
            case DownloadManager.STATUS_SUCCESSFUL : {
                Log.i("ololo", "Okay, I'll broadcast.");
                // Broadcasting
                break;
            }
            case DownloadManager.STATUS_FAILED : {
                Log.i("ololo", "Bad, I won't broadcast.");
                int reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON));
                if(reason == DownloadManager.ERROR_CANNOT_RESUME || reason == DownloadManager.ERROR_UNKNOWN) {
                    // Rerun download
                }
                break;
            }
            default:
                break;
        }
    }
}
 Tal Kanel10 сент. 2012 г., 13:58
Очень плохо, мне нужно использовать его в планшетах Samsung P7510 и P5110 (GALAXY TAB 10.1 ONE и TWO), и мне нужно, чтобы он работал на конкретных версиях ОС, которые вы упомянули ... так что я думаю, что мне нужно реализовать мой собственный обходной путь ..
 efpies09 сент. 2012 г., 21:54
@TalKanel Проблема возникает ТОЛЬКО с устройствами Samsung (Galaxy Tab 10.1 или что-то еще, на 3.2, или 2.3.3, или 4.0 & xx; 2013; это не имеет значения, никогда не случалось ни с одним HTC). Я думаю, что есть своиbuggy реализацияDownloadManager, Так что мой руководитель команды написал ее собственную реализацию, и она работает хорошо.
 Tal Kanel06 сент. 2012 г., 09:58
Привет, у меня та же проблема. Вы как-то решили или поняли, что не так?
 Petrus Repo10 апр. 2014 г., 09:19
Состояние успешной работы диспетчера загрузки по-прежнему срабатывает дважды, по крайней мере, на LG Nexus 4.4.2 (см. Ссылку на отчет об ошибке в ответе ниже). Я провел с этим добрую половину дня, пока, наконец, не сдался. Катаюсь что-то сloopj.com/android-async-http или жеcode.google.com/p/google-http-java-client или жеcode.google.com/p/basic-http-client которые выглядят многообещающими и обеспечивают абстракцию для AsyncTask.

Ответы на вопрос(1)

Решение Вопроса

DownloadManager содержит ошибки и не работает правильно. Эта ошибка была подана в Google некоторое время назад:

https://code.google.com/p/android/issues/detail?id=18462

Для загрузки одного файла вы можете обойти это, указав уникальный каталог для загрузки специально для этой цели, и просто взять все, что вы получите в этом каталоге, при DownloadManager.STATUS_SUCCESSFUL.
Что касается загрузки нескольких файлов, я не могу найти обходной путь в настоящий момент, если у вас нет возможности переименовывать файлы в источнике.

 03 мая 2013 г., 12:43
Я столкнулся с немного похожей проблемой ... получение STATUS_FAILED для запуска загрузки ... есть идеи почему?
 12 февр. 2014 г., 12:00
DownloadManager не завершает загрузку файлов, размер которых превышает Integer.MAX_VALUE (~ 2,1 ГБ) для ОС менее 4.2.2. вопросreported here.
 02 мая 2013 г., 10:27
Я думаю, что это будет работать в вашем случае:papaya-backend.net/2013/04/12/…
 20 дек. 2018 г., 08:30
Эта ошибка еще не исправлена. Можете ли вы предложить какой-либо альтернативный способ проверить, является ли загрузка УСПЕШНОЙ или СБОЙ при использовании класса DownloadManager?
 03 мая 2013 г., 08:02
Да, использование HTTP ETags, вероятно, решит эту проблему. Однако использование HTTP ETags необязательно в спецификации HTTP, и поэтому использование ETags для решения этой проблемы зависит от наличия прямого доступа администратора к веб-серверу для добавления поддержки ETags. Я до сих пор утверждаю, что DownloadManager содержит ошибки, потому что он не работает без поддержки ETags.

Ваш ответ на вопрос