Android 正在从getExternalFilesDir()删除图像文件?
我很难弄清楚我的应用程序到底发生了什么。许多用户报告说,应用程序生成的图像文件已经消失。但是,数据库数据并没有消失,而是存储在公共位置Android 正在从getExternalFilesDir()删除图像文件?,android,Android,我很难弄清楚我的应用程序到底发生了什么。许多用户报告说,应用程序生成的图像文件已经消失。但是,数据库数据并没有消失,而是存储在公共位置Context.getDatabasePath()。此外,所有文件夹都保持完整,只是缺少图像 所以我认为Android系统中有一些常规导致了这一点?或者其他清理*.png文件的应用程序?我知道我的应用程序没有删除它们,因为我没有任何例程递归删除所有图像文件 另外,父文件夹有.nomedia文件,所以库不应该接触所有子文件夹,对吗 我将这些文件存储在以下路径结构中,
Context.getDatabasePath()
。此外,所有文件夹都保持完整,只是缺少图像
所以我认为Android系统中有一些常规导致了这一点?或者其他清理*.png文件的应用程序?我知道我的应用程序没有删除它们,因为我没有任何例程递归删除所有图像文件
另外,父文件夹有.nomedia文件,所以库不应该接触所有子文件夹,对吗 我将这些文件存储在以下路径结构中,其中%d是唯一的数字: getExternalFilesDir()/projects/p_%d/l_%d/%d.png 这是我获取项目路径创建的方式:
public static File getProjectsDir(Context context)
{
// External app directory handled by the OS. Meaning that when the app is uninstalled all
// the data inside this folder will be also removed.
File appRoot = context.getExternalFilesDir(null);
if (null == appRoot) {
Log.e(TAG,"getProjectsDir() -> External storage not accessible!");
return null;
}
File projectsDir = new File(appRoot, "projects");
// create projects directory
if (!projectsDir.exists()) {
if (!projectsDir.mkdir()) {
Log.e(TAG,"getProjectsDir() -> Unable to create projects folder!");
return null;
} else {
File noMediaFile = new File(projectsDir, ".nomedia");
if (!noMediaFile.exists()) {
try {
if (!noMediaFile.createNewFile()) {
Log.e(TAG,"getProjectsDir() -> no media file failed to be created!");
}
} catch (IOException e) {
Log.e(TAG,"getProjectsDir() -> no media file failed to be created!",e);
}
}
}
}
return projectsDir;
}
根据,DownloadManager似乎会从第三方应用中删除超过7天未被访问(即“UI可见”)的任何文件
解决方法是在文件下载后重命名文件,以便DownloadManager不再跟踪它。“所以我认为Android中有一些例程导致了这种情况?”--我不知道标准Android中有任何东西会删除除用户请求之外的文件(例如,设置中的“清除数据”)。缓存目录可以自动清除,至少在存储容量较低的情况下是如此。“或者其他一些清理*.png文件的应用程序?”——使用外部存储,这当然是可能的。你可能会考虑在你的应用程序中添加一些对这个条件的自动检查,然后将其记录在你可以从中提取设备细节(例如,ACRA中的一个无声异常)中,寻找共同的特征。“父文件夹有.NoMIDA文件,所以所有的子文件夹不应该被画廊所触摸吗?”--这充其量只是一个惯例。@commonware谢谢你的帮助。所以“清除缓存”不会删除我可以确认的项目图像。此外,“清除数据”会导致删除数据库和项目文件。因此,用户没有做任何这些或操作系统。我有分析跟踪崩溃,如ACRA。。。但是你建议我做什么样的自动支票呢?比如监听文件删除?一些细节将是伟大的!Thx。“但是你建议我做什么样的自动检查?”——当你的应用程序启动时,根据文件系统验证数据库。如果数据库说应该有一个
%d
为123的图像,而没有这样的图像,那么某个东西会在你背后删除该图像。如果没有图像,那么所有的图像都被删除了,这可能值得记录。没错!谢谢你的推荐。