Android,注册一个需要的文件,不能删除

标签 android

我的应用是一个照片应用。我需要使用用户的照片(存储在“虚拟”sdcard 或真实sdcard 上)来转换为缩略图并显示它们。如果用户单击缩略图,我将显示全尺寸照片(我从其实际位置加载)。如果一段时间后用户删除了照片,那么我的应用程序只有缩略图而无法显示真实照片。

如果我将原始照片复制到我的应用程序位置或特定文件夹,那么这就是重复。我的应用程序使用了很多照片,所以它是不可持续的(后来用户因为存储空间占用而感到恼火,可能会删除应用程序)。这就是为什么我不复制原件,而是从它们的真实位置抓取它们

问题: 有没有一种方法可以让我向操作系统注册我的应用程序需要用户想要删除的文件,而他们无法删除它们? (通过谷歌搜索,这似乎是不可能的,但谁知道呢,值得一试)

谢谢

最佳答案

我删除图片不就是不想再看到吗?无论您在您的应用程序中做什么,您都不应该做出这种限制。

要么复制图片并处理双倍的已用内存(这仍然不意味着用户不能删除这些文件......它们仍然对他可见)或者使用当前的图片在磁盘上,不处理已删除的。

回答你的问题:完全限制图片的删除是不可能的。如果您有 root 访问权限,这可能是可能的,但即使在那里,我也不确定当用户可以轻松地将 sd 卡放入计算机时,您将如何限制图片的写入/修改/删除。

可能有一种方法可以将文件设置为只读(仅限内存存储)。看看:

How do we copy files and retain their read only attribute in Android?

Attempt to create an readonly file on the android SD card fails

无论如何,即使你找到了解决这个问题的方法 -> 你不应该!让用户决定他想删除什么!

编辑:另一种方法是实现 FileObserver。 听图片文件夹,如果文件被删除,复制这个文件。不幸的是,观察者只会告诉你已经发生了什么 ;)

(参见 How do you implement a FileObserver from an Android Service)。

关于Android,注册一个需要的文件,不能删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21214617/

相关文章:

android - 找不到 com.android.tools.build :gradle:4. 1.1

java - 文本转语音产生错误

android - 两个android设备之间的远程连接

android - 如何动态更改 MenuItem 的可见性?

java - 使用 Glide 从 Firebase 存储中获取图像

android - 如何使用 Retrofit 2 获取 hashmap 响应

java - 对同一类中方法的无参数调用产生 NullPointerException

Android Developer Console 不会加载,因为 SSL 错误

android - 使用android opencv打印出矩阵

android - Volley Image Loader 抛出 ParseError