在 API 23 及更高版本中插入 SD 卡时,getExternalFilesDirs() 未在 ApplicationContext 中更新

Posted

技术标签:

【中文标题】在 API 23 及更高版本中插入 SD 卡时,getExternalFilesDirs() 未在 ApplicationContext 中更新【英文标题】:getExternalFilesDirs() not updated in ApplicationContext upon SD card insertion in API 23 & above 【发布时间】:2017-02-28 10:26:06 【问题描述】:

当应用在前台运行并插入SD卡,并尝试使用检索路径

ctx.getExternalFilesDirs(Environment.DIRECTORY_DOWNLOADS);

上下文有时是 ApplicationActivity 上下文

使用活动上下文时,获取更新后的 SD 卡路径,但使用应用程序上下文时,不获取更新后的路径

仅在 API 2324

上发生

解决方法是杀死应用程序并重新启动应用程序

有谁知道这是棉花糖虫子吗?

注意:我看到有些人在 google 中创建了问题 Issue 214247

【问题讨论】:

所以你在热插拔? 【参考方案1】:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)Environment.getExternalStorageState() 一起使用

类型 DIRECTORY_DOWNLOAD 未列为 getExternalFilesDir() 的有效参数,请查看文档:https://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String)

【讨论】:

感谢您的回复,但我尝试使用您提到的选项,但 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) 它只返回主存储路径 getExternalStoragePublicDirectory: /storage/emulated/0 而不是 SD 卡路径

以上是关于在 API 23 及更高版本中插入 SD 卡时,getExternalFilesDirs() 未在 ApplicationContext 中更新的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 Android 的 API 23 及更高版本中获取位置(纬度、经度)?

我的Android Studio应用仅适用于API 23及更高版本

Android Edittext 不能专注于 API 22(代码在 API 23 及更高版本上运行良好)

Android drawable 对于 API <23 和 API 23 及更高版本显示为拉伸

如何使用 Target API 23 及更高版本通过 GPS 获取用户位置

使用密钥库安卓。针对版本 18 及更高版本。必须使用已弃用的方法调用?