Android:将外部存储器上的文件夹设为私有或受保护
Posted
技术标签:
【中文标题】Android:将外部存储器上的文件夹设为私有或受保护【英文标题】:Android: make a folder on external memory private or protected 【发布时间】:2012-03-08 20:41:34 【问题描述】:我想将外部存储器(可能在 SD 卡上)上的文件夹设为私有或受保护,以便只有我的应用程序/进程可以访问该文件夹。
我可以这样做吗?如果有请告诉我?
我的要求: 我可以使用 android 的内存来存储我的应用程序的文件/数据,但这可能会减少手机的内存(这可能会导致没有足够空间安装其他应用程序等问题)
【问题讨论】:
【参考方案1】:外部存储上的数据不能保密。它是全球可读的,如果启用 USB 大容量存储,用户可以对其进行更改。
引自 developer.android.com:
每台 Android 兼容设备都支持共享的“外部存储”,您可以使用它来保存文件。这可以是可移动存储介质(例如 SD 卡)或内部(不可移动)存储。保存到外部存储的文件是全球可读的,并且可以在用户启用 USB 大容量存储以在计算机上传输文件时进行修改。
【讨论】:
【参考方案2】:你不能。你可以压缩文件夹并存储为密码压缩文件。
【讨论】:
哇!超级酷,苏尼尔怎么能这样?你能分享一些关于这方面的信息吗【参考方案3】:从 API 9 开始,您拥有用于此目的的
File.setWritable(boolean, boolean)
也适用于读/执行操作。看看链接
【讨论】:
谢谢,但我必须从 API 7 开始支持。 我有一个解决方案——如果我们可以在外部存储器上创建一个名称以“。”开头的文件夹。那么该文件夹对用户不可见(例如:.myAppPrivateFolder),则满足我的要求。怎么说!!! 用户看不到该文件夹,但该文件夹仍然存在...恕我直言,这不是一个解决方案..但似乎没有解决方案来设置文件夹的权限,因为 api 9.. 所以试试隐藏文件夹并希望最好:) 如果用户没有权限改变这个抽象路径名的访问权限,操作会失败。只有自建文件才会这样。 @OneWorld 这就是文档所述。有什么问题吗?【参考方案4】:引用自 android 文档:
public abstract File getExternalFilesDir (String type)
Since: API Level 8 返回目录的绝对路径 外部文件系统(在某处 Environment.getExternalStorageDirectory()) 应用程序可以在其中 放置它拥有的持久性文件。
这些文件是私有的 应用程序,并且通常不作为媒体对用户可见。这是 像 getFilesDir() 一样,这些文件将在 应用程序已卸载[...]
来源:http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String)
所以基本上你会在你的 SD 卡中获得一个私人(分类)文件夹。
将此与 Blackbelt 的答案结合使用以获得更好的效果。
【讨论】:
您错过了文档中的一个重要事实:这些文件没有强制执行安全性。例如,任何持有 WRITE_EXTERNAL_STORAGE 的应用程序都可以写入这些文件。以上是关于Android:将外部存储器上的文件夹设为私有或受保护的主要内容,如果未能解决你的问题,请参考以下文章
如何在 crate 中将 Rust 项目设为公开,但在其外部设为私有?