在Android 4.4.2 Environment.getExternalStorageDirectory().getPath()
上返回/storage/emulated/0
,但我的Nexus5 Android 4.4.2上不存在此路径。 Environment.getExternalStorageDirectory().getPath()
一直工作到Android 4.4.2。
如何在Android 4.4.2上获得/sdcard
路径?
答案 0 :(得分:20)
我的Nexus5 Android 4.4.2上不存在此路径。
是的,它适用于您在运行时的过程。
例如,this sample project将文件下载到Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
。如果您在运行时记录该位置,则在Nexus 5上运行该位置时,会将其报告为/storage/emulated/0/Download
。下载成功。
如果您要通过DDMS或 /storage/emulated/0
查找adb shell
,则无法找到它。对于这些工具,默认外部存储为/mnt/shell/emulated/0
。因此,上面示例中的下载文件显示在/mnt/shell/emulated/0/Download
目录中。
AFAIK,区别在于为辅助帐户提供单独的外部存储。
答案 1 :(得分:2)
Storage Options文档说明要使用Environment.getExternalStorageDirectory()(正如您已经正确使用的那样)。此功能适用于所有Android版本。
您是否看到它返回4.2设备上实际无法使用的路径?
请注意(来自Environment.getExternalStorageDirectory()):
应用程序不应直接使用此顶级目录,以避免污染用户的根命名空间。应用程序专用的任何文件都应放在Context.getExternalFilesDir返回的目录中,如果卸载了该应用程序,系统将负责删除该目录。其他共享文件应放在getExternalStoragePublicDirectory(String)返回的其中一个目录中。
写入此路径需要WRITE_EXTERNAL_STORAGE权限,从读取权限开始需要READ_EXTERNAL_STORAGE权限,如果您持有写入权限,则会自动授予该权限。
从KITKAT开始,如果您的应用程序只需要存储内部数据,请考虑使用getExternalFilesDir(String)或getExternalCacheDir(),它们不需要读取或写入权限。
答案 2 :(得分:2)
有时/ storage / emulated / 0可以被写入,但读取失败...因此对“可写性”的测试是不够的。这是一个令人烦恼的问题,我想出了一个同样烦人但有效的解决方案。 硬编码“/ mnt / sdcard”是的,我说过了。
看起来其他人先说了...... storing android application data on SD Card
更多的快乐...... http://forums.bignerdranch.com/viewtopic.php?f=414&t=7407