android - 没有sdcard时能写入sdcard文件夹吗?

标签 android sd-card

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

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

是否有类似于我在旧手机上丢失的存储文件夹的东西,或者当没有 sd 卡时我可以写入 sdcard 文件夹吗?

编辑:我的 list 中有外部写入权限

最佳答案

在某些手机上,如 documentation建议不要把外部这个词看得太严肃:

Note: don't be confused by the word "external" here. This directory can better be thought as media/shared storage. It is a filesystem that can hold a relatively large amount of data and that is shared across all applications (does not enforce permissions). Traditionally this is an SD card, but it may also be implemented as built-in storage in a device that is distinct from the protected internal storage and can be mounted as a filesystem on a computer.

您可以使用 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 中引入

Devices may contain multiple instances of external storage, but currently only the primary external storage is exposed to developers through API.

[...]

Starting in Android 4.2, devices can support multiple users, and external storage must meet the following constraints:

  • [...]
  • Secondary external storage must not be writable by apps.

这似乎取决于供应商,哪个存储(内部或真实外部)被认为是主要存储。您在这里无能为力(不会让事情变得困惑......)


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

关于android - 没有sdcard时能写入sdcard文件夹吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492087/

相关文章:

java - 如何将字符串日期转换为长毫秒

c++ - 从 Windows 服务检测 SD 卡插入?

android - 从 Android Market 安装到 SDCARD

java - 分配 ListView ID 错误 - Android Studio

android - 如何更改/重置处理程序后延迟时间?

android - 尝试覆盖 SimpleCursorAdapter 中的 getView 会给出 NullPointerException

android - Android 的 animTime 常量的实际毫秒时间值是多少?

android - 将文件保存在 SD 卡上,写入文件大小 0

android - 图像,SD卡,安卓

android - 通过 adb 获取 sdcard 目录