所以我正在测试4.1上的galaxy s3上的应用程序以及运行2.3的旧款手机。两部手机都没有SD卡,但是当我在我的galaxy s3上使用Environment.getExternalStorageDirectory().getAbsolutePath()
时,它会将我引导到名为storage的文件夹中名为sdcard0的文件夹中。当我在旧手机上运行它时它给我路径mnt / sdcard /并且sdcard文件夹是只读的。
我正在尝试在这些目录中创建一个文件夹。我可以在我的s3上进行,但不能在我的旧手机上进行。
是否存在类似于旧手机上缺少的存储文件夹的内容,或者当没有SD卡存在时我可以写入sdcard文件夹吗?
编辑:我在清单中有外部写权限
答案 0 :(得分:3)
在某些手机上,正如documentation建议的那样,外部一词不会太严肃:
注意:不要在这里混淆“外部”这个词。这个 目录可以更好地被视为媒体/共享存储。 这是一个 可以容纳相对大量数据的文件系统 在所有应用程序之间共享(不强制执行权限)。 传统上这是一张SD卡,但它也可以在与受保护设备不同的设备中实现为内置存储 内部存储,可以作为文件系统安装在计算机上。
您可以使用Environment.isExternalStorageRemovable()
-method检查存储是否真正外部。如果它不可移动,你应该总是能够写入它(假设你已经声明了权限)。
如果 可移动,则需要使用Environment.getExternalStorageState()
检查其当前状态。以下是如何使用它的快速示例:
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write!
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// Mounted read only...
} else {
// Something is wrong...
}
因此,在这些情况下,您可以写入外部存储。
重要:正如文档在多个点指定的那样,上述方法适用于 主 外部存储。某些设备(如Motorola Xoom)同时具有内部“外部”存储和SD卡。
在这些设备上似乎没有“通用”方式来访问“辅助外部存储”,尽管现在有一个standard,在Android 4.2中引入
设备可能包含多个外部存储实例,但是 目前只有主要外部存储通过API向开发人员公开。
[...]
从Android 4.2开始,设备可以支持多个用户,并且 外部存储必须满足以下约束条件:
- [...]
- 应用无法写入辅助外部存储空间。
似乎依赖于供应商哪个存储(内部或真实外部)被认为是主存储。你在这里做的不多(没有弄乱的东西......)
如果没有外部存储,您可以使用应用程序Internal Storage或缓存目录,具体取决于您要存储的数据类型。