【问题标题】:How do I create a file in the "Internal Storage" folder (Primary External Storage) of my Samsung A51 Android 10?如何在我的 Samsung A51 Android 10 的“内部存储”文件夹(主要外部存储)中创建文件?
【发布时间】:2020-07-02 04:21:44
【问题描述】:

我了解在当前的 SDK 中,我的应用程序的外部存储文件是在 /data/data/"package" 文件夹中创建的。但是,我正在与另一个我无法控制的应用程序集成,它从我的 Android 10 (R) 手机上的“内部存储”(哪个是主要外部存储?AARG!:) 文件夹中读取。我已经搜索了 2 天,如何在标有“内部存储”(我的文件-> 内部存储)的文件夹中创建一个简单的 .csv 文件,但根本找不到获取该位置路径的解决方案。

我将我的 Android Studio 设置为 minSdkVersion 为 16,complileSdkVersion 设置为 28,所以至少我可以使用一些早期的方法进行文件管理。我希望我的应用程序能够在至少 3 年或更新的手机/平板电脑上运行。没有必要的 UI(选择器 - 正如新文档建议使用的那样)来选择一个文件夹来保存文件,只需简单地创建一个我需要的文件。我是一名老 Java 程序员,但对 Android 很陌生。大多数帖子都指向我们在 >28 个 SDK 中丢失的已弃用功能。

【问题讨论】:

  • 您谈论的奇怪文件夹仅在您使用不良文件管理器应用程序时才存在。请谈谈 getFilesDir()、getExternalFilesDir() 和 getExternalStorageDirectory()。尝试它们并提及完整路径。重写您的帖子,以便我们知道您想要什么。
  • getFilesDir() = "/data/user/0/com.help.filetest/files"
  • getFilesDir() = "/data/user/0/com.help.filetest/files", getExternalFilesDir() = "/storage/emulated/0/Android/data/com.help.filetest /文件”。此外,此代码抛出 java.lang.IllegalArgumentException: File /storage/emulated/0/Android/data/com.help.filetest/files/SampleFile1.csv contains a path separator : File filesDir = getFilesDir();文件 extFilesDir = getExternalFilesDir(null);尝试 { FileOutputStream outFile = openFileOutput (extFilesDir + filename1, 0); outFile.write(testHeader.getBytes()); }...

标签: android


【解决方案1】:

我了解在当前的 SDK 中,我的应用的外部存储文件是在 /data/data/"package" 文件夹中创建的。

不,那是internal storage

但是,我正在与另一个我无法控制的应用集成,它从我的 Android 10 (R) 手机上的“内部存储”(哪个是主要外部存储?AARG!:) 文件夹中读取

该应用需要尽快更新。

我已经搜索了 2 天,如何在标有“内部存储”(我的文件->内部存储)的文件夹中创建一个简单的 .csv 文件,但根本找不到获取该位置路径的解决方案

对于 Android 10 及更低版本,您可以使用 Environment.getExternalStorageDirectory() 作为 external storage 的根。请注意,对于 Android 10 本身,您需要在 <application> 元素中添加 android:requestLegacyExternalStorage="true"

在 Android 11+ 上,您无法再使用文件系统 API 写入外部存储的根目录,除非您持有 MANAGE_EXTERNAL_STORAGE。如果您计划通过 Play 商店(可能还有其他地方)分发您的应用,则该权限需要使用理由。

没有必要的用户界面(选择器——新文档建议使用)来选择一个文件夹来保存文件

用户可能不同意您的观点。谷歌绝对不同意你的看法。在 Android 11 上,如果您不希望自己的应用被 Play 商店禁止,则需要使用 ACTION_CREATE_DOCUMENTACTION_OPEN_DOCUMENT_TREE 并允许用户决定用户的文件在用户设备上的位置。

大多数帖子都指向我们在 >28 个 SDK 中丢失的已弃用功能。

Android 中的“已弃用”并不总是意味着“失败”。它始终意味着“Google 希望您考虑另一种选择。因此,例如,Environment.getExternalStorageDirectory() 仍然存在,即使在 Android 11 中也是如此。它的用处不大,Google 更希望您使用 StorageVolume 上的方法而是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2014-04-17
    相关资源
    最近更新 更多