在 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);
上下文有时是 Application 和 Activity 上下文
使用活动上下文时,获取更新后的 SD 卡路径,但使用应用程序上下文时,不获取更新后的路径
仅在 API 23 和 24
上发生解决方法是杀死应用程序并重新启动应用程序
有谁知道这是棉花糖虫子吗?
注意:我看到有些人在 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 及更高版本显示为拉伸