2015-09-08 2 views
2

Есть некоторые подобные вопросы уже задавали, но мой немного отличается, у меня есть следующий код, чтобы сделать загрузку на моем приложении:поведения DownloadManager по созданию каталога

DownloadManager.Request request = new DownloadManager.Request(uri) 
         .setTitle(fileInfo.getFileName()) 
         .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, 
           getString(R.string.app_name) + File.separator + fileInfo.getFileName()); 

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
         request.allowScanningByMediaScanner(); 
        } 
manager.enqueue(request); 

Это прекрасно работает без жалоб на по крайней мере, Samsung S4, Nexus 4, Nexus 7, однако недавно я узнал, что на некоторых устройствах не удается создать каталог с ошибкой:

Так что теперь я проверяю каталог и создаю, если он не существует с

File downloadDir = new File (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) 
          + File.separator + getString(R.string.app_name)); 

        if (!downloadDir.exists()){ 
         boolean mkdir = downloadDir.mkdir(); 
        } 

Мой вопрос, почему DownloadManager ведет себя отличается ли это Android версии или поставщика проблема и что ожидаемое поведение, так как документация getExternalStoragePublicDirectory утверждает, что она может бросаться IllegalStateException: IllegalStateException If the external storage directory cannot be found or created.

Я предположил, что это должен попытаться создать каталог в этом случае не должно быть никаких оснований или необходимости для меня, чтобы использовать функцию mkdir, но это не так

+0

вы можете вставить журналы –

+0

@RahulPatil я могу, но это скорее ожидаемый вопрос поведение, ошибка ИПС 'Не удалось создать целевой файл/хранение/эмулировать/0/Скачать/μECS/AU3110005_AU3110006_Celulas não linfoides.pdf at com.android.providers.downloads.Helpers.getFullPath (Helpers.java:204) 'его исправлено, если я создаю каталог μECS сам, как я сказал по вопросу, я просто хочу знать, или не документом, я не могу понять – forcewill

ответ

1

у меня было такое же поведение на LG G3 без создания поддиректории:

W/DownloadManager: Aborting request for download 544: Failed to create target file /storage/emulated/0/Download/Sub Directory/IMG_20150422_160932.jpg 
       com.android.providers.downloads.StopRequestException: Failed to create target file /storage/emulated/0/Download/Sub Directory/IMG_20150422_160932.jpg 
        at com.android.providers.downloads.Helpers.getFullPath(Helpers.java:213) 
        at com.android.providers.downloads.Helpers.generateSaveFile(Helpers.java:166) 
        at com.android.providers.downloads.DownloadThread.processResponseHeaders(DownloadThread.java:2054) 
        at com.android.providers.downloads.DownloadThread.access$500(DownloadThread.java:130) 
        at com.android.providers.downloads.DownloadThread$ContentAnalyzer.init(DownloadThread.java:274) 
        at com.android.providers.downloads.DownloadThread.executeDownload(DownloadThread.java:922) 
        at com.android.providers.downloads.DownloadThread.runInternal(DownloadThread.java:784) 

вызов этого метода, прежде чем помогает:

 private void createDirectoryIfNecessary() { 
      File downloadDir = new File (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) 
        + File.separator + subdirectory); 
      if (!downloadDir.exists()){ 
       downloadDir.mkdirs(); 
      } 
     } 
Смежные вопросы