在我的Android应用程序中我使用系统下载管理器下载照片,一旦收到我处理它然后我需要将它移动到另一个位置。如果我只是复制它它工作正常,如果我尝试移动/删除它我得到一个例外,它不能被移动。
Failed to delete original file '/data/user/0/com.android.providers.downloads/cache/a3133p2930-9.jpg' after copy to '/data/data/com.XXXXX.testharness/app_appdata/images/one/two/three/6/a3133p2930.jpg'
也尝试过:
1)在尝试移动它之前将其从下载管理器中删除 2)将目标直接设置为目标目录,但出现错误我只能使用公共外部文件夹。 3)尝试使用JAVA renameTo和Apache commons moveFile
这是一段代码片段,展示了我正在做的事情的相关部分。
任何想法?
理解
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
String uriString = c.getString(
c.getColumnIndex(
DownloadManager.COLUMN_LOCAL_URI));
String uri2String = c.getString(
c.getColumnIndex(
DownloadManager.COLUMN_URI));
String localFileString = c.getString(
c.getColumnIndex(
DownloadManager.COLUMN_LOCAL_FILENAME));
File from = new File(localFileString);
File to = new File(appDataDir, localString);
File to2 = new File (appDataDir, localString + "/" + getFileNameFromUrl(uri2String));
if (!to.exists()) {
if (to.mkdirs()) {
Log.d(LCAT, "Directory Created");
}
}
dm.remove(downloadId);
//boolean a = from.renameTo(to2);
try {
FileUtils.copyFile(from, to2);
} catch (Exception e) {
Log.d(LCAT, "rename success? " + e.getMessage());
}
答案 0 :(得分:4)
我认为您无法删除downloadmanager
的缓存,我认为它从您的数据库中删除了downloadid后会自动清除,但是如果您希望对文件进行控制,则可以将目标文件夹设置为私有外部存储然后在下载完成后删除它。
File rootDirectory = new File(getActivity().getExternalFilesDir(null).getAbsoluteFile().toString());
if(!rootDirectory.exists()){
rootDirectory.mkdirs();
}
req.setDestinationInExternalFilesDir(getActivity(),null ,"/" + fileName);
在下载完成后,您可以删除它:
from.delete();
并且文档说:
public int remove(long ... ids)
取消下载并将其删除 下载管理器。如果它正在运行,每个下载都将停止, 并且将无法再通过下载管理器访问它。如果 有一个下载的文件,部分或完整,它被删除。
http://developer.android.com/reference/android/app/DownloadManager.html#remove%28long...%29