正如文档所暗示的,在某些手机上,不要把外部这个词看得太严重:
注意:不要被这里的“外部”这个词弄糊涂了。最好将此目录视为媒体/共享存储。它是一个文件系统,可以保存相对大量的数据,并且在所有应用程序之间共享(不强制执行权限)。
传统上这是一张 SD 卡,但它也可以作为设备中的内置存储实现,与受保护的内部存储不同,并且可以作为文件系统安装在计算机上。
您可以使用-method检查存储是否真的是外部的。如果它不可移动,您应该始终能够写入它(假设您已声明权限)。Environment.isExternalStorageRemovable()
但是,如果它是可移动的,则需要使用 . 检查它的当前状态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 卡。
似乎没有“通用”方式来访问此类设备上的“辅助外部存储”,尽管现在有一个标准,随 Android 4.2 引入
设备可能包含多个外部存储实例,但
目前只有主外部存储通过 API 暴露给开发人员。
[...]
从 Android 4.2 开始,设备可以支持多个用户,并且
外部存储必须满足以下约束:
这似乎取决于供应商将哪个存储(内部或真正的外部)视为主要存储。你在这里可以做的不多(没有事情变得混乱......)
如果没有外部存储,您可以使用应用程序Internal Storage或缓存目录,具体取决于您存储的数据类型。