4.4.2上我的SD卡位置在哪里?

时间:2013-12-22 22:08:53

标签: android

在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路径?

3 个答案:

答案 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