为啥 getExternalFilesDirs 根据使用的上下文返回不同的结果?

Posted

技术标签:

【中文标题】为啥 getExternalFilesDirs 根据使用的上下文返回不同的结果?【英文标题】:Why does getExternalFilesDirs return different results depending on which context is used?为什么 getExternalFilesDirs 根据使用的上下文返回不同的结果? 【发布时间】:2018-09-20 00:49:00 【问题描述】:

这个很奇怪。我使用Context.getExternalFilesDirs 获取可移动SD 卡的路径。这在运行 android 6.0.1 的 LG X Power 上运行良好。但是,在 Android 6.0 上的 LG Spirit H440N 上,根据使用的上下文,它会给我不同的结果。如果我在

上调用此方法 活动,我得到一个大小为 2 的数组,其中包含内部和可移动 SD 卡文件路径 应用程序上下文,我得到一个大小为 1 的数组,仅包含内部文件路径的路径

为什么我会根据调用方法的上下文得到不同的结果?权限在每种情况下的工作方式是否不同?

请注意,我已经在清单中列出了这两个权限:

<uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

【问题讨论】:

Why does getExternalFilesDirs return different results depending on which context is used? 奇怪的问题。你说它不适用于 LG X 电源。 Note that I've listed both permissions in the manifest: 无关。您不需要这些权限即可调用该函数。 感谢您非常有用的 cmets! 【参考方案1】:

是的,我也这么认为。我在使用 Redmi 设备时遇到了同样的问题。

applicationapplicationContext Context.getExternalFilesDirs(null) 只显示 1 个文件(内部存储),但当我使用 baseContextFirebaseMessagingService context 时效果很好。

所以,我认为baseContext.getExternalFilesDirs(null) 对你有用。

【讨论】:

以上是关于为啥 getExternalFilesDirs 根据使用的上下文返回不同的结果?的主要内容,如果未能解决你的问题,请参考以下文章

getExternalFilesDir 和 getExternalStorageDirectory() 之间的区别

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

getExternalFilesDir到底是什么

将照片从相机保存到安卓内部存储

android 各种存储目录使用总结之Context#getExternalFilesDir

Android存储及getCacheDir()getFilesDir()getExternalFilesDir()getExternalCacheDir()区别