问题
I am trying to save a file to my SDcard on my Samsung Galaxy Nexus running 4.2.2. From my app I am using
Environment.getExternalStorageDirectory()
But it returns
/storage/emulated/0/
Which is not where my SDcard information is located to. Is there any working method I can use to get the correct path to my SDcard?
回答1:
Actually, that is the correct location.
From android 4,2 onwards, Google introduced multiple user accounts. Every user has his/her own external storage, which has the user ID in the path to maintain uniqueness.
The primary (default) user's ID is 0. So you get /storage/emulated/0/
as the path to the external storage.
回答2:
I just learned this is the Jelly Bean's way of dealing with the lack of android.permission.WRITE_EXTERNAL_STORAGE
permission. I haven't seen such a behavior with older versions of Android.
Just add this line to your AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
回答3:
Environment.getExternalStorageDirectory()
refers to whatever the device manufacturer considered to be "external storage". I can be something else than the SD-card.
You may get more informations here: Find an external SD card location
回答4:
I think its because of using genymotion emulator, the path is true and in Eclipse it locates at
File Explorer - > mnt - > shell - > emulated -> 0
hope it helps ;)
回答5:
Sure? Where do you think your sdcard is mounted? Try doing ls -l
on that directory – it's probably a symlink to /storage/emulated/0/
.
回答6:
I had somehow lost my symlink at /storage/emulated/0, causing a similar failure. What I did was use the camera app to take a picture. I observed that the pictures details said it was within /storage/emulated/0, though that directory did not exist from the file explorer. Then I rebooted the phone. After reboot the link existed.
回答7:
Try to use getExternalFilesDir()
or getExternalStoragePublicDirectory()
.
From Android 4.2 documentation
来源:https://stackoverflow.com/questions/15501355/getexternalstoragedirectory-not-working