【问题标题】:Android Download Manager is duplicating existing filesAndroid 下载管理器正在复制现有文件
【发布时间】:2019-06-17 14:22:46
【问题描述】:

我正在尝试使用 DownloadManager 将音频文件下载到应用程序拥有的目录之一。 这是我的代码:

    File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_MUSIC), 
    audioName + ".mp3");

    if (file.exists()) {
        return;
    } else {

        DownloadManager mgr = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        Uri downloadUri = Uri.parse(url);
        DownloadManager.Request request = new DownloadManager.Request(
                downloadUri);

        request.setAllowedNetworkTypes(
                DownloadManager.Request.NETWORK_WIFI
                        | DownloadManager.Request.NETWORK_MOBILE).setAllowedOverMetered(true)
                .setAllowedOverRoaming(true).setVisibleInDownloadsUi(false)
                .setDestinationUri(Uri.fromFile(file));

        mgr.enqueue(request);
    }

问题是 downloadManager 正在复制已经下载的音频,例如,如果我有一个名为“test.mp3”的音频文件,我会在我的应用程序目录中找到“test.mp3”和“test1.mp3”。

我做错了吗?

请记住,我想下载应用目录中的文件,这就是我使用 setDestinationUri

的原因

【问题讨论】:

  • 你在哪里填充这个“audioName”变量?你需要检查这个
  • audioName 来自哪里?
  • 我正在使用 Volley 从服务器获取音频名称,我想要的是如果音频名称已经存在,则不会简单地下载文件。
  • 请问您每次获得的价值是多少?
  • 如果我尝试多次下载名为“test.mp3”的文件,我会得到“test-1.mp3”“test-2.mp3”test-3.mp3”等... .取决于我调用上面代码的次数。但是我想要的是当文件已经下载(目录中已经存在)时,它不会再次下载。我希望这足够清楚

标签: android android-file android-download-manager


【解决方案1】:

我有同样的问题。到目前为止,我已经意识到下载管理器很少停止下载,并且会继续这样做并将值附加到相同的文件名。所以我建议通过你的目标目录并删除重复的文件。您可以在 onCreate 上调用此方法。

     private void cleanUp()
        {
            String path = "PATH TO YOUR DOWNLOAD DIRECTORY/FOLDER NAME/";
            Log.d("Files", "Path: " + path);
            File directory = new File(path);
            File[] files = directory.listFiles();
            Log.d("Files", "Size: "+ files.length);
            for (int i = 0; i < files.length; i++)
            {
                Log.d("Files", "FileName:" + files[i].getName());
                for(int j=1;j<files.length;j++)
                {
                    if(files[i].getName().contains("-"+String.valueOf(j)+".mp3")) // format according to how your download manager has renamed the file e.g "-"+String.valueOf(j)+".mp3" for fileName-1.mp3 or  String.valueOf(j)+".mp3" for fileName1.mp3
                    {
                        toast(files[i].getName());
                        files[i].delete();
                    }
                }

            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2014-10-20
    • 1970-01-01
    相关资源
    最近更新 更多