2017-02-17 4 views
0

Я пытаюсь загрузить файл с помощью DownloadManager внутри AsyncTaskЗагрузка файла с DownloadManager Android

private class DownloadTask extends AsyncTask<String, Void, Boolean> 
{ 

    private Context mContext; 

    public DownloadTask(Context context) 
    { 
     mContext = context; 
    } 

    @Override 
    protected Boolean doInBackground(String... strings) { 


     String fileName = strings[2]+"_"+strings[3]+ strings[4]; 
     String destination = mDestination + fileName; 
     final Uri uri = Uri.parse("file://" + destination); 
     mDownloading = true; 
     //If the file is already downloading just return. 
     File file = new File(destination); 
     if (file.exists()) { 
      return true; 
     } 



     //set downloadmanager 
     DownloadManager.Request request = new DownloadManager.Request(Uri.parse(strings[0]));   
     request.setDescription(mContext.getString(R.string.downloading)+ " "+strings[1]); 
     request.setTitle(mContext.getString(R.string.downloading_title)); 

     //set destination 
     request.setDestinationUri(uri); 

     // get download service and enqueue file 
     final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 

     final long downloadId = manager.enqueue(request); 


     //set BroadcastReceiver to enable next download 
     BroadcastReceiver onComplete = new BroadcastReceiver() { 
      public void onReceive(Context ctxt, Intent intent) { 
       unregisterReceiver(this); 
       mDownloading = false; 
      } 
     }; 
     //register receiver for when file download is compete 
     registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 
     return true; 
    } 
}` 

код работает прекрасно, когда я прохожу URL файла. Дело в том, что мы хотим сделать GET-вызов WEB, созданный на PHP. Этот метод WEB создает или выбирает файл и перенаправляет его с помощью заголовка ("Location: ".$database->single()['Url']);

Но когда мы вызываем звонок из DownloadManager, он сразу вызывает registerReceiver.

Кто-нибудь знает, почему это происходит?

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

Благодарим вас за комментарии.

+0

У вас нет ответа, но попробуйте скачать с помощью этого либрана: https://github.com/tonyofrancis/Fetch?utm_source=android-arsenal.com&utm_medium=referral&utm_campaign=5196 –

+0

Спасибо, я попробую. – Gabrielkdc

+0

К сожалению, для меня я получил точные результаты с помощью Fetch. Однако большое открытие. – Gabrielkdc

ответ

0

3xx: перенаправления не поддерживается DownloadManger.Source code по строке 510

И он загрузит ответ перенаправления и закончен правильно.

Итак, вы должны получить ответную головку [Место] самостоятельно и передать ее заданию.


Кстати, вам не нужно ставить задачу загрузки в AsyncTask.

Смежные вопросы