例如,我尝试直接在外部存储目录中下载一个大的 zip 文件
"/mnt/sdcard/Android/data/com.vexdev.audioguida.app/files/data"
Run Code Online (Sandbox Code Playgroud)
我想我应该使用
DownloadManager.Request.setDestinationInExternalPublicDir(path, fileName)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何为其提供在不同 Android 设备上一致的路径。
而且我还试图获取稍后访问该文件的路径,如下所示:
File file = new File(path + fileName);
Run Code Online (Sandbox Code Playgroud)
我在这里问是因为我知道这两种方法需要不同的根路径,因为我试图提供这样的路径:
Application.getAppContext().getExternalFilesDir(Environment.getDataDirectory().getAbsolutePath()).getAbsolutePath();
Run Code Online (Sandbox Code Playgroud)
但 DownloadManager 并未将文件放在 File 构造函数稍后搜索的位置。(实际上它下载到了错误的目录中!)
我正在寻找一种方法将这些文件直接下载到正确的目录中,而无需移动它们。
是否可以在Manifest.xml中监听DownloadManager.ACTION_DOWNLOAD_COMPLETE?
我发现的所有示例registerReceiver(downloadCompleteReceiver,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));均来自 a class,但我希望在 Manifest.xml 中接收它,以便我可以在应用程序关闭时收听。当我尝试在 Manifest.xml 中为接收器设置意图过滤器时,我找不到此操作
我正在尝试在片段类内部实现DownloadManager,但它给了我错误(我无法编译代码)。下面的行我得到这个:
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题。
我正在使用下载管理器同时下载多个文件。但我的问题是下载管理器同时开始下载所有文件我需要在队列中一个一个开始下载文件意味着第一个项目首先下载而不是一个一个。
下载管理器.Java
if(downloaddata.size()>0){
for(int i=0;i<downloaddata.size();i++){
downloadFiles(downloaddata.get(i).getFile_id(),downloaddata.get(i).getFile_url(),"OTHER");
}
}
public void downloadFiles(String myid,String myurl,String type){
createFolder();
String fileName = URLUtil.guessFileName(myurl, null, null);
Uri uri=Uri.parse(myurl);
request=new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
request.setTitle(myid);
request.setMimeType(type);
request.setDestinationInExternalPublicDir("/peakmedia",fileName); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
downloadReference=downloadManager.enqueue(request);
downloadlist.add(downloadReference);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用下面的代码,但不知道文件正在下载到哪里。给定路径中没有存储任何文件。代码中需要进行哪些更正。代码在开始时创建文件夹。
String path = Environment.getExternalStorageDirectory().getPath() + "/Myapp/Videos";
System.out.println(path);
File folder = new File(path);
if (folder.canExecute()) {
System.out.println("Video Folder Found");
} else {
folder.mkdirs();
}
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setDescription("Selected Video is being downloaded");
request.allowScanningByMediaScanner();
request.setTitle("Downloading Video");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalFilesDir(mContext, null, title + ".mp4");
DownloadManager manager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
return null;
Run Code Online (Sandbox Code Playgroud) 我需要下载几个图像和视频,这个要求需要"一次"下载,所以不需要任何缓存,这就是我不使用Volley的原因.视频的排球可能很昂贵.
接下来,我偶然发现了内置Android的下载管理器,这似乎有利于在队列上下载,该API似乎并不总坏,但我不知道它如何比较使用Service与ScheduledThreadPoolExecutor(由Commonsware的后一个决定的选项)?
注意:我的用例严格来说不是为网格下载图像而是有可能重复请求.我的请求只能是单次下载.该请求可能是少量图像和视频的混合.
可以在ScheduledThreadPoolExecutor里面Service是显著快?
我正在通过 android DownloadManager 下载文件,其功能如下。
private fun downloadFile() {
val downloadManager: DownloadManager =
getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
val request =
DownloadManager.Request(Uri.
parse("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"))
downloadManager.enqueue(request)
}
}
Run Code Online (Sandbox Code Playgroud)
下载正常进行,无需任何存储权限。
下载管理器在没有存储权限的情况下是否可以工作?我在官方文档中找不到答案。
https://developer.android.com/reference/android/app/DownloadManager
我正在使用下载管理器从url下载文件。并且文件下载成功。
问题
文件正在静默下载,通知区域中没有通知。
下载管理器在运行android 6.0的设备上显示了通知(带有进度条)。我将设备更新为android 7.0后,下载管理器在通知区域未显示任何通知。
这是我的代码
Uri uri = Uri.parse("file://" + destination);
url = "http:....."; //Valid File URL
//Set up download manager request
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setDescription("Downloading " + file_name);
request.setTitle("My Downloader");
request.setDestinationUri(uri); //URI is valid
//Start the download
DownloadManager manager = (DownloadManager) getContext()
.getSystemService(Context.DOWNLOAD_SERVICE);
Run Code Online (Sandbox Code Playgroud)
另外添加request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);也无济于事。
建造信息
这是我的Gradle Build信息。
minSdkVersion 22
targetSdkVersion 23
compileSdkVersion 25
buildToolsVersion "25.0.2"
Run Code Online (Sandbox Code Playgroud)