首页 > 解决方案 > getExternalFilesDirs 不返回 SD 卡,仅返回内部/内置存储

问题描述

getExternalFilesDirs应该在内部存储和外部存储上返回我的应用程序的私有数据文件夹。在我所有的手机上这都能正常工作(各种 LG、三星和 Moto 手机,跨越版本 4.4 到 11),但在我的许多客户的手机上却没有,只有内部存储文件夹被返回(/storage/emulated/ 0 ...); 他们的 SD 卡丢失 (/storage/abc-123/...)。我将其归结为各种各样的手机制造商,但在一种情况下,客户的三星 S10 看不到 SD 卡,而我的 S10e 可以(都运行 android 10)。不幸的是,这些是游戏商店的客户,所以我无法实际调试这些问题。

那么这里发生了什么?为什么此方法无法在某些手机上包含 SD 卡,而在其他手机上则不包含?我尝试在循环中调用它,并且尝试从活动的上下文和应用程序的上下文中调用 { getApplicationContext().getExternalFilesDirs(null) } 并没有任何帮助,我总是得到相同的结果。我什至尝试过从 /storage 获取目录列表,但这也不起作用,包括在我的手机上。

我不认为这是 SAF 的问题,因为这是我的应用程序的数据文件夹,它始终是我的应用程序私有的,据我所知,即使在 android 12 中,您也可以使用 Java File api 访问您的私有数据文件夹。但请记住,这不是 File API 失败的问题,问题是 getExternalFilesDirs() 没有返回多个路径。

当然,这些相同的客户发誓其他应用程序可以看到他们的外部 SD 卡。当然,这些应用程序可能正在使用 SAF。但这仍然不能解释为什么 getExternalFilesDirs() 在几乎相同的硬件(三星 s10 与 s10e)上给出不一致的结果。

过去曾以各种形式提出过这个问题,但最近从未如此,而且自 2015 年以来发生了很多变化,所以当时的建议都不是相关的(当然,我已经阅读了所有这些帖子并尝试了所有内容)。此外,我的问题中的新问题是两部几乎相同的手机运行应该相同的软件版本的具体情况,一部具有 getExternalFilesDirs() 结果,包括 SD 卡,另一部则没有。所以我认为这值得一个新的职位。

标签: androidstorage

解决方案


推荐阅读