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 应用程序

如何访问android java中的所有视频

如何从我的 Android 应用程序访问新的 Gmail API?

我如何以表格形式查看 ms 访问表单中的所有插入数据