Открытие файлов, загруженных с помощью DownloadManager, вызывает ошибку «Путь к документу недействителен».

Я пытаюсь открыть PDF-файл, загруженный DownloadManager, но время от времени получаю сообщение «Неверный путь к документу» на Samsung Galaxy S3 с Android 4.1.2.

Намерение:

Intent openIntent = new Intent(Intent.ACTION_VIEW);
openIntent.setDataAndType(downloadManager.getUriForDownloadedFile(lastDownloadId), "application/pdf");
startActivity(openIntent);

Разрешения:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Менеджер закачек:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs(); 

DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
long lastDownloadId = downloadManager.enqueue(new DownloadManager.Request(uri)
    .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
    .setAllowedOverRoaming(false)
    .setTitle(title)
    .setDescription(description)
    .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "myfile.pdf"));

Что я делаю не так?

Изменить: время от времени я получаю это:

COLUMN_ID: 108 
COLUMN_BYTES_DOWNLOADED_SO_FAR: 33085
COLUMN_LAST_MODIFIED_TIMESTAMP: 1397152425941 
COLUMN_LOCAL_URI: null
COLUMN_STATUS: 16 COLUMN_REASON: 1008

Почему?


person Ziem    schedule 10.04.2014    source источник
comment
Какое значение возвращает getUriForDownloadedFile()?   -  person CommonsWare    schedule 10.04.2014
comment
@CommonsWare - иногда возвращает ноль. Почему? Я отредактировал свой ответ.   -  person Ziem    schedule 10.04.2014


Ответы (1)


Статус 16 – это STATUS_FAILED, что означает, что загрузка не удалась. Причиной 1008 является ERROR_CANNOT_RESUME, и я понятия не имею, что значит в реальном мире. Но ваш файл не был загружен, и, следовательно, у вас нет Uri.

person CommonsWare    schedule 10.04.2014