Environment.getExternalStorageDirectory不会返回可移动存储的path
从API级别8开始,Android似乎已经重新定义了“外部”存储。 阅读http://developer.android.com/reference/android/os/Environment.html ,附加到getExternalStorageDirectory
的文档,我看到的评论:“不要被这个词”外部“混淆在这里。这个目录可以更好地被认为是媒体/共享存储…在具有多个“外部”存储目录的设备中,该目录表示用户将与之交互的“主”外部存储。
我的应用程序将文件写入由getExternalStorageDirectory
获得的path,并且我有用户要求一个选项,而不是写入到他们的可移动SD卡。 我一直认为getExternalStorageDirectory
返回到可移动SD卡的path,但这不再是事实。 如何访问此SD卡的path?
根据源代码 ,执行getExternalStorageDirectory
返回设备环境中设置为“外部存储”的任何内容:
public static File getExternalStorageDirectory() { return EXTERNAL_STORAGE_DIRECTORY; }
和EXTERNAL_STORAGE_DIRECTORY
是:
private static final File EXTERNAL_STORAGE_DIRECTORY = getDirectory("EXTERNAL_STORAGE", "/sdcard"); static File getDirectory(String variableName, String defaultPath) { String path = System.getenv(variableName); return path == null ? new File(defaultPath) : new File(path); }
相反, getExternalStoragePublicDirectory(String type)
需要以下string之一:
DIRECTORY_MUSIC,DIRECTORY_PODCASTS,DIRECTORY_RINGTONES,DIRECTORY_ALARMS,DIRECTORY_NOTIFICATIONS,DIRECTORY_PICTURES,DIRECTORY_MOVIES,DIRECTORY_DOWNLOADS或DIRECTORY_DCIM。 可能不为null 。
所以它不是要返回SD卡的根。
替代:
最后, getExternalStorageState()
将返回挂载在/mnt/sdcard/
的文件系统。 根据CommonsWare在这个答案: find一个外部SD卡的位置 ,没有办法直接得到外部SD卡(如果它存在)。
另一种方法是检查isExternalStorageRemovable ()
并给出一个手动选项,如果它是假的。
对于API 17,我得到以下回报:
Environment.getExternalStoragePublicDirectory(Environment.MEDIA_MOUNTED) returns:-------> /storage/sdcard0/mounted Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) returns:-------> /storage/sdcard0/DCIM Environment.getExternalStoragePublicDirectory(Environment.MEDIA_SHARED) returns:-------> /storage/sdcard0/shared Environment.MEDIA_MOUNTED returns:-------> mounted Environment.getExternalStorageDirectory() returned:-------> /storage/sdcard0
所有返回内部手机内存的位置。
- 如何在Android手机上安装APK文件?
- 从两个类扩展
- “未安装以下SDK组件:sys-img-x86-addon-google_apis-google-22和addon-google_apis-google-22”
- AVD Manager – 没有为此目标安装系统映像
- ActionBarActivity已被弃用
- ClassNotFoundException:未find类“com.google.android.gms.ads.AdView”
- 如何在另一个应用程序中启动活动?
- 在将Android Studio更新到版本1.3.0后,我得到“NDK集成在当前插件中被弃用”错误
- 清单文件中的android:configChanges不允许使用错误stringtypes