...
Uri uri = Uri.parse("content://downloads/my_downloads");
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.allowScanningByMediaScanner();
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
以上是对于Android 11及以上版本下载文件的解决方案。如果要同时支持Android 10及以下版本,可以根据文件大小来选择使用MediaStore API还是旧的方式来保存文件。
参考文献:
[1] https://stackoverflow.com/questions/64380650/downloadmanager-not-working-in-android-11-score-28
[2] https://developer.android.com/about/versions/11/privacy/storage?hl=zh-cn
[3] https://developer.android.com/training/data-storage/shared/media?hl=zh-cn