Android 10如何在所有应用程序都可以访问的文件管理器中创建文件/文件夹[重复]
Posted
技术标签:
【中文标题】Android 10如何在所有应用程序都可以访问的文件管理器中创建文件/文件夹[重复]【英文标题】:Android 10 How to create file/folder in file manger that is accesible with all app [duplicate] 【发布时间】:2019-10-15 10:05:16 【问题描述】:我正在使用下面的代码在存储中创建一个目录/文件。
File file = new File(Environment.getExternalStorageDirectory().toString(), "/MyDirectory");
在 android 10 中更新目标 SDK 版本 29 后,它无法正常工作。
谁能建议如何在应用程序范围之外创建一个文件夹?
【问题讨论】:
【参考方案1】:对于 Android 版本 10:
https://***.com/a/58379655/3811983
对于 Android 10 以下的 Android 版本: (包括这里,因为没有人只为 Android 10 开发。这将使其成为任何希望在其应用中包含此功能的人的完整答案)
以下是我遵循的步骤,并且对我有用:
在应用的 AndroidManifest.xml 文件中包含以下权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
由于 WRITE_EXTERNAL_STORAGE 是危险权限,所以在应用运行时,检查应用是否有这个权限,如果没有,请求用户授予它。
Doc1 Doc2 AirPermissions(简化 Android 运行时权限的轻量级库)
检查外部存储是否存在以及应用是否可以对其进行读写if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED)
// further code here
如果一切正常,您可以继续创建您的公共目录:
val rootFile = android.os.Environment.getExternalStorageDirectory()
val appRootFolder = File(rootFile.absolutePath + "/MyDirectory")
if (appRootFolder.exists() && appRootFolder.isDirectory)
// proceed
else
val wasAppRootFolderCreated = appRootFolder.mkdirs()
if (wasAppRootFolderCreated)
// proceed
else
// error: could not create the folder
【讨论】:
这不适用于 Android 10(默认)和 Android R+(适用于所有应用程序)。这个问题专门针对 Android 10。以上是关于Android 10如何在所有应用程序都可以访问的文件管理器中创建文件/文件夹[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android Q (10) 请求访问所有存储的权限。范围存储
我的所有JSON输出(来自Laravel API应用程序)都包含在数据标签中,如何删除此标签?
我们如何从 xmpp 服务器将存档消息访问到 android 应用程序