Environment.getExternalStorageDirectory()返回错误的路径

时间:2015-05-13 13:21:06

标签: java android filesystems storage

我有下一个情况:Android 4.1,设备没有外部SD卡。以下代码:

File dir = new File( Environment.getExternalStorageDirectory() ); 

返回
/存储/ sdcard0

然后我尝试在那里创建一个文件并收到错误 java.io.IOException:open failed:EACCES(Permission denied)
我的应用程序有必要的行它的清单:

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

为了解决这个问题,我启动了adb并获得了文件列表,这是片段:

lrwxrwxrwx root root 2000-01-01 03:12 sdcard - &gt; /存储/ sdcard0
lrwxrwxrwx root root 2000-01-01 03:12 sdcard2 - &gt; /存储/ sdcard1
d - xr-xr-x system sdcard_r 2000-01-01 03:12存储

我无权访问 / storage / sdcard0 ,但我可以访问 / storage / sdcard1 有dirs:
ABBYY
报警
Android的
书籍
CheetahBrowser
DCIM
下载
SlideIT

似乎 getExternalStorageDirectory()仅仅运行不好。由于其他应用程序可以在正确的位置写入文件,这似乎很奇怪。我做错了什么?

更新
getExternalStorageState()返回“已删除”

我忽略了getExternalStorageDirectory()的结果并手动设置路径为“/ storage / sdcard1”然后一切正常,我可以创建目录和文件。

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题,这是一个充满异国情调的问题。开头的设备有一个外部SD卡,这张卡是“默认内存”。然后SD卡已被删除,但默认内存尚未切换到内置“内置”存储。结果系统返回了不正确的存储路径,直到我更正了“默认存储器”设置并且问题消失了。