标签: android-download-manager

下载的文件没有出现在android的下载应用程序中

我正在android中构建一个应用程序,用户可以下载远程文件并将其保存到外部存储下载目录.它运行良好,我可以通过Es File Explorer和其他文件资源管理器工具查看文件.但是这些文件没有出现在我的Nexus 4设备的下载应用程序中.请注意,我没有使用DownloadManager,而是创建HttpUrlConnection到远程服务器并下载文件.

有人可以告诉我如何在不使用DownloadManager的情况下使下载的文件出现在Downloads App中吗?

android download android-download-manager

9
推荐指数
2
解决办法
7220
查看次数

控制android中下载管理器的下载顺序

有一个如下用例:

有几个文件可供下载,例如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 download download-manager android-download-manager

9
推荐指数
1
解决办法
1044
查看次数

下载完成后获取消息

我正在尝试在我的应用程序中使用Android默认下载管理器,但问题是我的应用程序在下载完成后没有收到任何消息.有什么方法可以解决这个问题吗?

android android-download-manager

9
推荐指数
1
解决办法
104
查看次数

在INSUFFICIENT_SPACE_ERROR之后,DownloadManager不发送广播

问题

如果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)

android android-download-manager

9
推荐指数
1
解决办法
1003
查看次数

我从下载管理器中选择文档文件时收到IllegalArgumentException,这仅适用于oreo

我在这里附上日志:

   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

9
推荐指数
1
解决办法
6186
查看次数

Android - DownloadManager/BroadcastReceiver多次调用

我正在使用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

8
推荐指数
1
解决办法
5303
查看次数

如何在Android中下载m3u8格式的媒体文件

我需要解析m3u8媒体文件,这是一个播放列表,并下载实际的媒体内容.
根据我的理解,以下是涉及的过程:

  • 解析m3u8文件并获取'.TS'块
  • 检索完所有块后,将其合并为单个文件
  • 将合并的TS文件转换为mp4格式.

不幸的是,我找不到任何lib /模块来执行上述步骤.任何人都可以提供更好的方法或工作样本来处理和下载m3u8文件吗?

任何帮助深表感谢.

android download m3u android-download-manager m3u8

8
推荐指数
1
解决办法
8678
查看次数

在Android Pie上延迟的DownloadManager请求

我一直在使用DownloadManager API在一个应用程序中处理下载大约3年.最近我在Android Pie上有一些用户抱怨有时下载会在实际启动之前停留几分钟,从而影响用户体验:他们中的一些人不得不重新安装应用程序以使其正常工作,其他一些用户随着时间的推移自行修复问题.请注意,我没有设置任何特殊设置的DownloadManager.Request实例(例如allowedNetworkTypes,setRequiresCharging...).

我对这个问题的理解是,在开始之前,请求会长时间陷入挂起暂停状态.没有注意到SDK 28中引入的任何重大更改,尽管它并不重要,因为我的目标是API级别27.

有没有人经历过类似的事情并提出了一些解决方法?谢谢

android android-download-manager android-9.0-pie

8
推荐指数
1
解决办法
4011
查看次数

下载管理器不适用于 Android 10 (Q)

很长一段时间以来,我一直在努力解决这个问题……我正在更新一个应用程序,该应用程序使用 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

8
推荐指数
1
解决办法
7339
查看次数

listview中的多个文件下载管理器+进度/暂停/恢复android

我需要以这种形式为我的应用程序创建一个动态下载管理器:

  1. 添加新链接到当前列表
  2. 可以暂停和恢复下载
  3. 从自定义列表中删除完整下载

    像这样 图:

起初我使用此站点代码进行线程下载.

然后,我创建一个自定义列表视图,每次用户单击"下载"按钮时,将添加该下载链接.

但我有两个问题:

  1. 添加新链接到列表后,所有列表都将是新的!
  2. 以前未完成的下载将是新的,因为列表将是新的!

现在,问题是:我如何为我的应用程序创建一个动态下载管理器,可以添加具有暂停/恢复功能的列表的新链接,并从自定义列表中删除下载的项目?


编辑 - 添加Custom-Listview

我在此链接中的自定义列表视图:https://github.com/saeid-pm/Custom-Listview

android android-download-manager

7
推荐指数
1
解决办法
9914
查看次数