当没有SD卡时,你可以写入SD卡文件夹吗?

问题描述:

因此,我正在测试4.1版Galaxy S3上的应用程序和运行2.3的旧手机。无论是手机中有一个SD卡,但是当我在我的星系使用Environment.getExternalStorageDirectory().getAbsolutePath() S3它指引我到一个叫做文件夹,名为存储内sdcard0文件夹。当我在旧手机上运行它时,它给我的路径mnt/sdcard /和sdcard文件夹是只读的。当没有SD卡时,你可以写入SD卡文件夹吗?

我试图建立在这些目录中的文件夹。我可以在我的S3上做,但不能在我的旧手机上。

是否有类似我失去了旧的手机上或者我可以写的时候没有存在SD卡中的SD卡文件夹中存储文件夹的东西吗?

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

+0

只是一个预感,但你尝试没有getAbsolutePath()? – devconsole 2013-05-10 23:21:13

+0

插入SD卡时,系统会将其挂载到该挂载点。如果没有SD卡,它只是一个挂载点而没有指向任何东西。所以,不,你不能写信给它。 – 2013-05-10 23:22:01

+0

getExternalStorageState()说什么? – devconsole 2013-05-10 23:23:13

在某些手机上,为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... 
} 

所以在这种情况下,你可以写信给外部存储。


重要:作为文档指定的多个点,上述方法工作的外部存储设备。有些设备(如摩托罗拉Xoom)同时拥有内部“外部”存储和SD卡。

似乎有没有“广义”的方式来访问在这种设备上“次级外部存储”,虽然有一个standard现在,与Android 4.2

引入

设备可能包含的多个实例外部存储,但 目前只有主外部存储通过API暴露给开发者。

[...]

在Android 4.2开始,设备可以支持多个用户,并且 外部存储必须满足以下约束

  • [...]
  • 辅助外部存储器不能由应用程序写入。

这似乎取决于供应商,其存储(内部或真实外部)被认为是主要的。没有多少,你可以在这里做(没有的事情越来越乱......)


如果没有外部存储现在,你可以使用你的应用程序Internal Storage,或缓存目录,这取决于什么样的数据,你“的重新储存。