我正在android中构建一个应用程序,用户可以下载远程文件并将其保存到外部存储下载目录.它运行良好,我可以通过Es File Explorer和其他文件资源管理器工具查看文件.但是这些文件没有出现在我的Nexus 4设备的下载应用程序中.请注意,我没有使用DownloadManager,而是创建HttpUrlConnection到远程服务器并下载文件.
有人可以告诉我如何在不使用DownloadManager的情况下使下载的文件出现在Downloads App中吗?
有一个如下用例:
有几个文件可供下载,例如ABCDEF
当下载开始时,说AB完成并且C正在下载,我想中断C的下载并开始下载E
然后,在E完成后(如果没有其他中断),继续CD F.
到目前为止,我的研究只有取消方法
downloadManager.remove(downloadReference); 如何通过下载管理器实现这一目标还是有其他方法?谢谢
private long startDownload(String url) {
Uri DownloadUri = Uri.parse(url);
String fileName = StorageUtils.getFileNameFromUrl(url);
String destination = null;
downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(
DownloadUri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverRoaming(false);
request.setTitle(fileName);
request.setDescription("com.example.services");
if (StorageUtils.isSDCardPresent()
&& StorageUtils.isSdCardWrittenable()
&& StorageUtils.checkAvailableStorage()) {
destination = StorageUtils.SDCARD_ROOT;
}
try {
StorageUtils.mkdir();
} catch (IOException e) {
e.printStackTrace();
}
request.setDestinationInExternalPublicDir(destination, fileName);
downloadReference = downloadManager.enqueue(request);
Log.d("Downloader","Start download manager: " + destination + fileName);
return downloadReference;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的应用程序中使用Android默认下载管理器,但问题是我的应用程序在下载完成后没有收到任何消息.有什么方法可以解决这个问题吗?
如果cache目录已满,则尝试执行简单请求将失败而不发送DownloadManager.ACTION_DOWNLOAD_COMPLETE广播.
注意:问题是一般性的,但大多数情况下可以在缓存有限(/data/data/com.android.providers.downloads/cache)大小的低端设备上重现.
接收器配置正确,因为我在操作成功时仍然收到广播,并且由于其他原因而失败.
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("http://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=44753"));
request.setTitle("Facebook");
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.enqueue(request);
Run Code Online (Sandbox Code Playgroud)
我对特定问题的解决方案感兴趣,或者如果您遇到它也会有更多信息.
我不是在寻找一个需要我停止使用DownloadManager或添加WRITE_EXTERNAL_STORAGE权限的解决方案.
当缓存变满时,最后当缓存不再容纳时,您可以观察到以下日志入口(过滤后downloadmanager)
11-08 08:47:06.079 830-14261/? I/DownloadManager: Download 135 starting
11-08 08:47:06.989 830-14261/? W/DownloadManager: Downloads data dir: /data/data/com.android.providers.downloads/cache is running low on space. space available (in bytes): -6994124
11-08 08:47:06.999 830-14261/? I/DownloadManager: discardPurgeableFiles: destination = 2, targetBytes = 10485760
11-08 08:47:06.999 830-14261/? I/DownloadManager: Purged …Run Code Online (Sandbox Code Playgroud) 我在这里附上日志:
Caused by: java.lang.IllegalArgumentException: Unknown URI: content://downloads/public_downloads/1587
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:418)
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码,效果很好。但是对于下载管理器,它在``try''块的第一行引发异常
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
Run Code Online (Sandbox Code Playgroud)
我已经尝试过:Android使用contentResolver从内容URI获取文件路径, 并且:java.lang.IllegalArgumentException:未知的URI内容以及与此问题相关的其他一些内容,但没有一个解决了我的问题。
android uri android-contentprovider android-download-manager android-8.0-oreo
我正在使用DownloadManager来处理我的应用程序中的下载,我想在下载完成时通知用户.
我正在使用运行良好的下面的代码
public void downloaddownload(View v){
View v2 = (View) v.getParent();
TextView urlView = (TextView) v2.findViewById(R.id.url);
String urlString = (String) urlView.getText().toString();
TextView artistView2 = (TextView) v2.findViewById(R.id.artist);
final String artistString = (String) artistView2.getText().toString();
TextView titleView2 = (TextView) v2.findViewById(R.id.title);
final String titleString = (String) titleView2.getText().toString();
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(urlString));
request.setDescription(titleString);
request.setTitle(artistString);
// in order for this if to run, you must use the android 3.2 to compile your app
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MUSIC + "/folder", titleString …Run Code Online (Sandbox Code Playgroud) java android download-manager broadcastreceiver android-download-manager
我需要解析m3u8媒体文件,这是一个播放列表,并下载实际的媒体内容.
根据我的理解,以下是涉及的过程:
不幸的是,我找不到任何lib /模块来执行上述步骤.任何人都可以提供更好的方法或工作样本来处理和下载m3u8文件吗?
任何帮助深表感谢.
我一直在使用DownloadManager API在一个应用程序中处理下载大约3年.最近我在Android Pie上有一些用户抱怨有时下载会在实际启动之前停留几分钟,从而影响用户体验:他们中的一些人不得不重新安装应用程序以使其正常工作,其他一些用户随着时间的推移自行修复问题.请注意,我没有设置任何特殊设置的DownloadManager.Request实例(例如allowedNetworkTypes,setRequiresCharging...).
我对这个问题的理解是,在开始之前,请求会长时间陷入挂起或暂停状态.没有注意到SDK 28中引入的任何重大更改,尽管它并不重要,因为我的目标是API级别27.
有没有人经历过类似的事情并提出了一些解决方法?谢谢
很长一段时间以来,我一直在努力解决这个问题……我正在更新一个应用程序,该应用程序使用 DownloadManger 来执行一个简单的任务,例如将文件下载到外部存储公共目录,即:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
Run Code Online (Sandbox Code Playgroud)
从 Android api 19-28 开始,这里一切正常。在 API 29 (Q/10) 上进行测试时,就会出现问题。Android实作用域存储等弃用getExternalStoragePublicDirectory ......因此,我需要找出一个兼容的解决方案,以支持的API 19- 29。我无法使用内部应用程序存储,因为 DownloadManager 会抛出 SecurityException。Androids 文档指出我可以使用 DownloadManager.RequestsetDestinationUri并且它甚至提到我可以使用的 Android Q Context.getExternalFilesDir(String)。但是,当我这样做时,路径仍然是模拟路径:
/storage/emulated/0/Android/data/com.my.package.name/files/Download/myFile.xml
Run Code Online (Sandbox Code Playgroud)
我从下载管理器收到一个回调,表明下载已完成(使用正确的 ID),但随后我无法从保存它的区域获取下载。我检查文件是否存在并返回false:
new File("/storage/emulated/0/Android/data/com.my.package.name/files/Download/myFile.xml").exists();
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏
添加上下文代码。所以设置下载管理器
private void startDownload() {
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
registerReceiver(downloadReceiver, filter);
String remoteURL= getString(R.string.remote_url);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(remoteUrl));
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setTitle(getString(R.string.download_title));
request.setDescription(getString(R.string.download_description));
request.setDestinationUri(Uri.fromFile(new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "myFile.xml")));
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
mainDownloadID= manager.enqueue(request);
}
Run Code Online (Sandbox Code Playgroud)
检查文件是否存在:
new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "myFile.xml").exists(); //this returns false in the onReceive (and download …Run Code Online (Sandbox Code Playgroud) android download android-download-manager android-10.0 scoped-storage
我需要以这种形式为我的应用程序创建一个动态下载管理器:
从自定义列表中删除完整下载
像这样 
起初我使用此站点代码进行线程下载.
然后,我创建一个自定义列表视图,每次用户单击"下载"按钮时,将添加该下载链接.
但我有两个问题:
现在,问题是:我如何为我的应用程序创建一个动态下载管理器,可以添加具有暂停/恢复功能的列表的新链接,并从自定义列表中删除下载的项目?
编辑 - 添加Custom-Listview
我在此链接中的自定义列表视图:https://github.com/saeid-pm/Custom-Listview