使用donwloadManager下载的文件将消失

时间:2017-08-03 08:33:32

标签: android android-download-manager

我有一个应用程序从服务器下载大约6k张照片,并将它们存储在我的应用程序设置配置的文件夹中,我使用.nomedia文件将文件隐藏在库中,并且它们仅在我的应用程序库中可见,但是当我离开我的设备时,大约5000张照片消失了,文件夹中只剩下大约920张,我完全不知道为什么要删除文件。

这是我的下载文件代码

    DownloadManager downloadManager = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE);
    DownloadManager.Request request;
    fileURL = convertUri(fileURL);
    if (!URLUtil.isValidUrl(fileURL)) { return false; }
    Uri downloadUri = Uri.parse(fileURL);
    String fileName = URLUtil.guessFileName(fileURL, null, MimeTypeMap.getFileExtensionFromUrl(fileURL));
    deleteFileIfExists( new File( getAbsolutePath(path), fileName ));
    request = new DownloadManager.Request(downloadUri);
    request.setAllowedNetworkTypes( DownloadManager.Request.NETWORK_WIFI )
            .setTitle(fileName)
            .setAllowedOverRoaming(false)
            .setVisibleInDownloadsUi(false)
            .setDestinationInExternalPublicDir( getPath(path), fileName );
    downloadManager.enqueue(request);

2 个答案:

答案 0 :(得分:0)

将System.currenttimeMillisecond()添加到fileUrl,以确保您的文件名不重复。

答案 1 :(得分:0)

本周末,我使用3种不同的设备和2种不同的下载方法进行了测试,在下载管理器中,文件消失了,所以如果有人在这里遇到同样的问题我是如何下载文件的:

public static boolean downloadFile(Activity activity, String fileURL) {
    fileURL = convertUri(fileURL);
    if (!URLUtil.isValidUrl(fileURL)) { return false; }

    try {
        String fileName = URLUtil.guessFileName(fileURL, null, MimeTypeMap.getFileExtensionFromUrl(fileURL));
        deleteFileIfExists( new File( activity.getExternalFilesDir(""), fileName ));

        URL u = new URL(fileURL);
        URLConnection conn = u.openConnection();
        int contentLength = conn.getContentLength();

        DataInputStream stream = new DataInputStream(u.openStream());

        byte[] buffer = new byte[contentLength];
        stream.readFully(buffer);
        stream.close();

        File file = new File(activity.getExternalFilesDir(""), fileName);
        DataOutputStream fos = new DataOutputStream(new FileOutputStream(file));
        fos.write(buffer);
        fos.flush();
        fos.close();
    } catch(FileNotFoundException e) {
        return false; // swallow a 404
    } catch (IOException e) {
        return false; // swallow a 404
    }
    return true;
}