Android:下载管理器请求到缓存目录

时间:2019-01-09 19:26:47

标签: android caching

我需要使用本地下载管理器将敏感文件保存到缓存的目录中。用户无法发现的位置。我可以使用DownloadManager.Request()轻松下载到用户的外部文件系统。尽管使用setDestinationInExternalPublicDir()或任何其他方式设置目标,但不允许我保存到缓存的目录。我在这里想念东西吗?

2 个答案:

答案 0 :(得分:0)

DownloadManager中的内部版本无法将文件保存到内部目录。仅适用于外部目录(例如SD卡)和其他公共目录,例如视频或照片文件夹。

答案 1 :(得分:0)

您必须忘记下载管理器中的Android构建并创建自己的管理器。然后您可以下载到以下路径:getCacheDir().getAbsolutePath();

以下是示例代码,无需内置管理器即可自行下载文件

public String downloadFile(String fileURL, String fileName) {

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        Log.d(TAG, "Downloading...");
        try {
            int lastDotPosition = fileName.lastIndexOf('/');
            if( lastDotPosition > 0 ) {
                String folder = fileName.substring(0, lastDotPosition);
                File fDir = new File(folder);
                fDir.mkdirs();
            }

            //Log.i(TAG, "URL: " + fileURL);
            //Log.i(TAG, "File: " + fileName);
            URL u = new URL(fileURL);
            HttpURLConnection c = (HttpURLConnection) u.openConnection();
            c.setRequestMethod("GET");
            c.setReadTimeout(30000);
            c.connect();
            double fileSize  = (double) c.getContentLength();
            int counter = 0;
            while ( (fileSize == -1) && (counter <=30)){
                c.disconnect();
                u = new URL(fileURL);
                c = (HttpURLConnection) u.openConnection();
                c.setRequestMethod("GET");
                c.setReadTimeout(30000);
                c.connect();
                fileSize  = (double) c.getContentLength();
                counter++;
            }

            File fOutput = new File(fileName);
            if (fOutput.exists())
                fOutput.delete();

            BufferedOutputStream f = new BufferedOutputStream(new FileOutputStream(fOutput));
            InputStream in = c.getInputStream();
            byte[] buffer = new byte[8192];
            int len1 = 0;
            int downloadedData = 0;
            while ((len1 = in.read(buffer)) > 0) {
                downloadedData += len1;
                f.write(buffer, 0, len1);
            }
            Log.d(TAG, "Finished");
            f.close();

            return fileName;
        }
        catch (Exception e) {
            e.printStackTrace();
            Log.e(TAG, e.toString());
            return null;
        }
    }