DownloadManager не начинает скачивать файл

Представьте, что я хочу загрузить этот файл (случайный файл): http://www.analysis.im/uploads/seminar/pdf-sample.pdf

Это мой код:

DownloadManager.Request req = new DownloadManager.Request(Uri.parse("http://www.analysis.im/uploads/seminar/pdf-sample.pdf"));

req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
   .setAllowedOverRoaming(false)
   .setTitle("Random title")
   .setDescription("Random description")
   .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "pdf-sample.pdf");

В режиме отладки я вижу, что все параметры правильные, почему загрузка не начинается?

ИЗМЕНИТЬ

Мои текущие разрешения:

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

person Giorgio Antonioli    schedule 18.05.2015    source источник
comment
Какую ошибку вы получаете?   -  person Narendra Singh    schedule 18.05.2015
comment
@DroidWormNarendra нет, просто загрузка не начинается, я не получаю никаких ошибок   -  person Giorgio Antonioli    schedule 18.05.2015
comment
у вас есть соответствующие разрешения добавлены?   -  person Yazan    schedule 18.05.2015
comment
разве setDestinationInExternalPublicDir() не нужен WRITE_EXTERNAL_STORAGE ?   -  person Yazan    schedule 18.05.2015
comment
@Yazan У меня тоже был такой, извините, если я не добавил его выше   -  person Giorgio Antonioli    schedule 18.05.2015


Ответы (4)


Вы разрешили скачивать в сети тип DownloadManager.Request.NETWORK_MOBILE, но зачем поставили setAllowedOverRoaming(false)?

Я пытался использовать Downloadmanager для загрузки файла, вот мой код:

String url = "http://example.com/large.zip";
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));

// only download via WIFI
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
request.setTitle("Example");
request.setDescription("Downloading a very large zip");

// we just want to download silently
request.setVisibleInDownloadsUi(false);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
request.setDestinationInExternalFilesDir(context, null, "large.zip");

// enqueue this request
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
downloadID = downloadManager.enqueue(request);

Надеюсь, вы вдохновлены.

person SilentKnight    schedule 18.05.2015
comment
Я не ставил запрос в очередь, поэтому добавил его, и он хорошо работал с моим кодом, спасибо! - person Giorgio Antonioli; 18.05.2015
comment
Будет ли это работать в автономном режиме? Мое приложение должно работать без интернета. Я пробовал с этим кодом, он не работает в автономном режиме. У вас есть идеи, можно ли скачивать в автономном режиме с помощью DownloadManager? - person Priyanka Alachiya; 31.07.2020

Вы подготовили только DownloadManager.Request. Вызов enqueue, как показано во фрагменте кода, фактически запустит загрузку.

DownloadManager downloadManager= (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
long downloadID = downloadManager.enqueue(request);// enqueue puts the download request in the queue.

Ознакомьтесь с полным примером для DownloadManager здесь

person IrshadKumail    schedule 29.08.2018

Выполните следующие шаги, чтобы загрузить случайный файл. Создайте класс с именем DownloadFileAsync.java.

  public class DownloadFileAsync extends AsyncTask<String, String, String> {
  public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
  private ProgressDialog mProgressDialog;

  private Context context;

  public DownloadFileAsync(Context context) 
 {
this.context = context;
 mProgressDialog = new ProgressDialog(context);
 mProgressDialog.setMessage("Downloading file..");
 mProgressDialog.setIndeterminate(false);
 mProgressDialog.setMax(100);
 mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 mProgressDialog.setCancelable(true);

}

@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog.show();
}

@Override
protected String doInBackground(String... aurl) {

try {
    File root = Environment.getExternalStorageDirectory();
    URL u = new URL(aurl[0]);
    HttpURLConnection c = (HttpURLConnection) u.openConnection();
    c.setRequestMethod("GET");
    c.setDoOutput(true);
    c.connect();

    int lenghtOfFile = c.getContentLength();

    FileOutputStream f = new FileOutputStream(new File(root + "/", aurl[1]));

    InputStream in = c.getInputStream();

    byte[] buffer = new byte[1024];
    int len1 = 0;
    long total = 0;

    while ((len1 = in.read(buffer)) > 0) {
        total += len1; //total = total + len1
        publishProgress("" + (int)((total*100)/lenghtOfFile));
        f.write(buffer, 0, len1);
    }
    f.close();
} catch (Exception e) {
    Log.d("Downloader", e.getMessage());
}

return null;

}

protected void onProgressUpdate(String... progress) {
 Log.d("ANDRO_ASYNC",progress[0]);
 mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}

@Override
protected void onPostExecute(String unused) {
mProgressDialog.dismiss();
}


    }

Вызовите вышеуказанный класс в своей деятельности как

  new DownloadFileAsync(TransformerActivity.this).execute(Constants.VIDEO_DOWNLOAD_LINK,"9T51B0108.mp4");
person Vinay Jayaram    schedule 18.05.2015

Также убедитесь, что на вашем телефоне не включены никакие VPN-приложения. Похоже, что некоторые из этих приложений могут мешать работе DownloadManager.

person Nicu Surdu    schedule 22.02.2018