getExternalStorageDirectory无效

时间:2013-03-19 13:51:02

标签: java android sd-card

我正在尝试将文件保存到运行4.2.2的Samsung Galaxy Nexus上的SD卡。从我的应用程序我正在使用

Environment.getExternalStorageDirectory()

但它返回

/storage/emulated/0/

这不是我的SD卡信息所在的位置。我可以使用任何工作方法来获取SD卡的正确路径吗?

7 个答案:

答案 0 :(得分:15)

实际上,这是正确的位置。

从Android 4,2起,Google引入了多个用户帐户。每个用户都有自己的外部存储,在路径中有用户ID以保持唯一性。

主要(默认)用户的ID为0.因此,您将/storage/emulated/0/作为外部存储的路径。

答案 1 :(得分:9)

我刚刚了解到这是Jelly Bean处理缺少android.permission.WRITE_EXTERNAL_STORAGE权限的方式。我还没有看到旧版Android的这种行为。

只需将此行添加到AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

答案 2 :(得分:5)

Environment.getExternalStorageDirectory()指设备制造商认为是“外部存储”的任何内容。我可以是SD卡以外的其他东西。

您可以在此处获得更多信息:Find an external SD card location

答案 3 :(得分:1)

我认为这是因为使用了genymotion模拟器, 路径是真的,在Eclipse中它位于

File Explorer - > mnt - > shell - > emulated -> 0 

希望它有所帮助;)

答案 4 :(得分:0)

不确定?您认为您的SD卡安装在哪里?尝试在该目录上执行ls -l - 它可能是/storage/emulated/0/的符号链接。

答案 5 :(得分:0)

我以某种方式丢失了我的符号链接/ storage / emulated / 0,导致类似的失败。我做的是使用相机应用程序拍照。我观察到图片细节表示它在/ storage / emulated / 0内,尽管该目录在文件资源管理器中不存在。然后我重新启动了手机。重新启动后,链接就存在了。

答案 6 :(得分:-1)

尝试使用getExternalFilesDir()getExternalStoragePublicDirectory()

来自Android 4.2 documentation