getExternalStorageDirectory不起作用

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

Environment.getExternalStorageDirectory() 

但它返回

 /storage/emulated/0/ 

这不是我的SDcard信息所在的位置。 有什么工作方法可以用来获得我的SD卡的正确path吗?

其实这是正确的位置。

从Android 4,2开始,Google引入了多个用户帐户。 每个用户都有他/她自己的外部存储器,在path中具有唯一性的用户标识。

主(默认)用户的ID是0.所以你得到/storage/emulated/0/作为外部存储的path。

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

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

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

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

您可以在此处获得更多信息: 查找外部SD卡位置

当然? 你认为你的SD卡在哪? 尝试在该目录上执行ls -l – 这可能是/storage/emulated/0/的符号链接。

我认为它是因为使用genymotion模拟器,path是真实的,在Eclipse中它位于

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

希望能帮助到你 ;)

我不知何故在/ storage / emulated / 0上丢失了我的符号链接,导致类似的失败。 我所做的是使用相机应用程序来拍照。 我观察到图片细节表示它在/ storage / emulated / 0中,尽pipe该目录在文件资源pipe理器中不存在。 然后我重新启动了电话。 重新启动后,链接已存在。

尝试使用getExternalFilesDir()getExternalStoragePublicDirectory()

从Android 4.2文档