Android 没有SD卡时,是否可以写入SD卡文件夹?

Android 没有SD卡时,是否可以写入SD卡文件夹?,android,sd-card,Android,Sd Card,所以我在4.1版本的galaxy s3和运行2.3版本的老式手机上测试一个应用程序。这两款手机都没有SD卡,但当我在galaxy s3上使用Environment.getExternalStorageDirectory().getAbsolutePath()时,它会将我指向名为storage的文件夹中名为sdcard0的文件夹。当我在旧款手机上运行它时,它会给我路径mnt/sdcard/,并且sdcard文件夹是只读的 我正在尝试在这些目录中创建一个文件夹。我可以在s3上完成,但不能在旧手机上完

所以我在4.1版本的galaxy s3和运行2.3版本的老式手机上测试一个应用程序。这两款手机都没有SD卡,但当我在galaxy s3上使用Environment.getExternalStorageDirectory().getAbsolutePath()时,它会将我指向名为storage的文件夹中名为sdcard0的文件夹。当我在旧款手机上运行它时,它会给我路径mnt/sdcard/,并且sdcard文件夹是只读的

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

是否有类似于我在旧款手机上丢失的存储文件夹的内容,或者在没有sd卡的情况下是否可以写入sd卡文件夹

编辑:我在某些手机的清单中拥有外部写入权限,正如建议的那样,外部一词不必太严肃:

注意:请不要被此处的“外部”一词所混淆。此 可以更好地将目录视为介质/共享存储这是一个 可以保存相对大量数据的文件系统 在所有应用程序中共享(不强制执行权限)。 传统上,这是一个SD卡,但它也可以作为内置存储器实现,安装在不同于受保护设备的设备中 内部存储,可以作为文件系统安装在计算机上

您可以使用检查存储器是否确实是外部的。如果它不可移动,您应该始终能够对其进行写入(假定您已声明了权限)

如果它是可移动的,您需要使用检查它的当前状态。下面是一个如何使用它的快速示例:

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卡

在这类设备上,似乎没有“通用”的方式来访问“辅助外部存储”,尽管安卓4.2引入了一种now

设备可能包含多个外部存储实例,但 目前只有主外部存储通过API向开发人员公开。

[……]

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

  • [……]
  • 辅助外部存储不能由应用程序写入。
这似乎取决于供应商将哪个存储(内部或真正的外部)视为主要存储。在这里你能做的不多(没有事情变得混乱…)


如果没有外部存储,则可以使用应用程序或缓存目录,具体取决于存储的数据类型

在一些手机上,正如建议的那样,外部这个词不应该太严肃:

注意:请不要被此处的“外部”一词所混淆。此 可以更好地将目录视为介质/共享存储这是一个 可以保存相对大量数据的文件系统 在所有应用程序中共享(不强制执行权限)。 传统上,这是一个SD卡,但它也可以作为内置存储器实现,安装在不同于受保护设备的设备中 内部存储,可以作为文件系统安装在计算机上

您可以使用检查存储器是否确实是外部的。如果它不可移动,您应该始终能够对其进行写入(假定您已声明了权限)

如果它是可移动的,您需要使用检查它的当前状态。下面是一个如何使用它的快速示例:

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卡

在这类设备上,似乎没有“通用”的方式来访问“辅助外部存储”,尽管安卓4.2引入了一种now

设备可能包含多个外部存储实例,但 目前只有主外部存储通过API向开发人员公开。

[……]

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

  • [……]
  • 辅助外部存储不能由应用程序写入。
这似乎取决于供应商将哪个存储(内部或真正的外部)视为主要存储。在这里你能做的不多(没有事情变得混乱…)



如果没有外部存储,则可以使用应用程序或缓存目录,具体取决于存储的数据类型

只是一种预感,但您是否尝试过不使用getAbsolutePath()?当插入SD卡时,系统会将其装载到该装载点。没有SD卡,它只是一个不指向任何东西的挂载点。所以,不,您不能写入它。getExternalStorageState()说什么?非常确定S3s sdcard0是它的内部存储器。混淆命名,但我认为是这样的!你能给出更多的细节、代码示例和结果吗?只是一种预感,但你是否尝试过不使用getAbsolutePath()?当插入SD卡时,系统会将其装载到该装载点。没有SD卡,它只是一个不指向任何东西的挂载点。所以,不,您不能写入它。getExternalStorageState()说什么?非常确定S3s sdcard0是它的内部存储器。混淆命名,但我认为是这样的!可以吗