gpt4 book ai didi

Android Q : file. mkdirs() 返回 false

转载 作者:行者123 更新时间:2023-12-03 07:32:59 25 4
gpt4 key购买 nike

我们有一个应用程序使用外部存储来存储一些临时文件:图像、二进制数据。直到最近,该代码已经运行了几年,没有发生大的变化。在 Android Q 上它不起作用:

File f = new File(Environment.getExternalStorageDirectory().toString() + File.separator + MainActivity.APP_DIR)
f.mkdirs();
// do sth with f
mkdirs现在只返回 false .

list 中提供了所需的权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

该代码在早期版本的 Android 上运行良好。这种类型的访问是否有一些系统级别的更改?如果是这样,解决方法是什么?

最佳答案

通过引入 Scoped Storage 在 android Q 中发生了巨大的隐私变化.
从 Q beta 4 开始,opt-out 成为可能该功能的:

  • 面向 API 28(或更低)
  • 使用 requestLegacyExternalStorage manifest 属性(针对 API 29):
  • <manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android Q. -->
    <application android:requestLegacyExternalStorage="true" ... >
    ...
    </application>
    </manifest>
    编辑:如其他答案中所述,如果应用程序针对 API 30,这将不起作用 - Android 11 设备将忽略旧存储标志。
    编辑 2:提醒任何计划在 Play 商店上发布的人 - 很快就会限制使用此标志(不接受新的和更新的应用程序),除非核心功能需要它(例如文件管理器)

    关于Android Q : file. mkdirs() 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56821095/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com