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