没有SD卡时你能写入sdcard文件夹吗?

时间:2013-05-10 23:16:02

标签: android sd-card

所以我正在测试4.1上的galaxy s3上的应用程序以及运行2.3的旧款手机。两部手机都没有SD卡,但是当我在我的galaxy s3上使用Environment.getExternalStorageDirectory().getAbsolutePath()时,它会将我引导到名为storage的文件夹中名为sdcard0的文件夹中。当我在旧手机上运行它时它给我路径mnt / sdcard /并且sdcard文件夹是只读的。

我正在尝试在这些目录中创建一个文件夹。我可以在我的s3上进行,但不能在我的旧手机上进行。

是否存在类似于旧手机上缺少的存储文件夹的内容,或者当没有SD卡存在时我可以写入sdcard文件夹吗?

编辑:我在清单中有外部写权限

1 个答案:

答案 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或缓存目录,具体取决于您要存储的数据类型。