Android 11 - 在存储根目录下创建应用程序目录作为共享文件夹
Posted
技术标签:
【中文标题】Android 11 - 在存储根目录下创建应用程序目录作为共享文件夹【英文标题】:Android 11 - creating app's directory as a shared folder under Storage root 【发布时间】:2021-06-27 13:10:25 【问题描述】:我们需要在内部存储根目录下将应用的目录创建为共享目录,以便可以使用任何文件管理器、照片库等查看通过我们的应用接收和下载的所有文件/图像。在 android 10 之前,我们能够这样做,但在 Android 11 中,当我们使用 getExternalFilesDir 了解根目录并创建应用程序的基本目录时,文件管理器看不到它。
//This is not visible from File Manager
File rootAppDir = context.getExternalFilesDir(null);
//This points to some other location, cannot see base directory of other apps under this
File rootStorageDir = Environment.getStorageDirectory();
我们看到许多其他应用程序在内部存储下创建了它们的文件夹,例如 Signal、Telegram 等。请让我们知道我们可能做错了什么以及如何在内部存储根目录下创建应用程序的基本目录。感谢您的帮助。
【问题讨论】:
使用ACTION_OPEN_DOCUMENT_TREE
,让用户决定用户设备(或用户云存储中的位置) ) 你的应用应该放置用户的内容。
@CommonsWare,感谢您的建议。但是,我们没有看到 Signal、Telegram 等向用户询问位置,他们是如何做到的?
最有可能的是,他们正在使用android:requestLegacyExternalStorage="true"
,它可以再使用几个月。一旦你的targetSdkVersion
命中30
——Play 商店将在今年晚些时候要求——该属性将不再有效。
谢谢,我们会不时使用相同的,然后当他们强制要求时,将遵循标准做法。
你能做到吗? @KrishnanVS 我也在努力创建其他应用程序可访问的图像,即图库或文件应用程序。
【参考方案1】:
我们按照@CommonsWare 的建议进行了操作 - 在 Manifest 中设置 android:requestLegacyExternalStorage="true" 并(重要)将 targetSdkVersion 从 30 标记为 29。这很有效。
【讨论】:
以上是关于Android 11 - 在存储根目录下创建应用程序目录作为共享文件夹的主要内容,如果未能解决你的问题,请参考以下文章
错误记录Android 分区存储下的 SD 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )
错误记录Android 分区存储下的 SD 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )