【问题标题】:Unable to access file system after Android 9 to 10 changeAndroid 9 到 10 更改后无法访问文件系统
【发布时间】:2020-03-04 10:11:52
【问题描述】:

我有一个使用存储设备上文件的应用程序。这在 Android 9 上运行得非常好。其中一件事是浏览目录以获取文件列表。

我刚刚更新到 Android 10。突然之间,目录中(显然)没有文件了。然而,根据 Total Commander,实际上所有相同的文件都在那里。

代码(文件夹是设置为 /storage/emulated/0/uk.co.nightshade-arts/maps 的字符串)是

...
String []
        rawFiles;

try {
    File    f = new File(folder);

    rawFiles = f.list();
}

catch (Exception e) {
        return null;
}

...

rawFiles 以 null 结束,如果路径不是文件夹,则 list() 应该返回 - 但它是一个文件夹。

但是,(1) 文件没有改变,(2) 根据 Total Commander,它们肯定存在,(3) 另一个具有相同存储权限、目标 API 等的应用程序,使用相同的代码列出一个(不同的) 目录仍然可以正常工作。

谁能提出可能导致此问题的 Android 9 和 10 之间可能发生的变化?

顺便说一句,我还注意到 Android Studio 不断与目标(Google Pixel 2)断开连接,因此现在手机运行 10 时调试失败。过去也没有发生这种情况。

【问题讨论】:

  • 如果你的目标是 Android 10,存储访问框架已经发生了变化,通过一个叫做 Scoped Storage 的东西,你可以在这里查看这些变化,看看它们如何影响应用程序:: @987654321 @
  • 谢谢,但实际上仍以 9 为目标,其他应用程序也是如此。不过我会看看。
  • 是的,见下文。就是这样。实际上这个应用错误地针对 API 29,而不是 28,另一个针对 28。所以另一个没问题,这不是。

标签: android android-file


【解决方案1】:

您确实无权访问针对 Android Q 的目录。

这就是变化。

不再访问 getExternalStorageDirectory()。

如果您想以旧方式继续直到 R,请添加 android:requestLegacyExternalStorage="true" 到清单。

【讨论】:

  • 我有一种可怕的感觉,你是对的。但是(1)无法理解为什么使用相同代码和目标 API 构建的其他应用程序没有问题,以及(2)当我将上述内容添加到清单时。如果由于找不到属性而无法构建。嘿嗬。构建 Android 代码让我想起了 80 年代的老式基于文本的冒险游戏(巨大的洞穴等) - 每次你绕过拐角时,都会有一个拿着斧头的侏儒等着要杀了你。
  • 是的,已解决,感谢您的帮助。其他应用程序的目标是 API 28,这个是 29。这就是区别。缺少该属性的原因可能是因为这个编译 API 是 28,并且正在使用该属性是因为 29 错误地错过了一些 GPS API .... 但是 28 没有该属性。我讨厌在 Android 系统上向前发展,似乎总能吸引你。
猜你喜欢
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多