Android 11 - 访问我的应用程序 Android/Data 文件夹中的文件

标签 android file android-external-storage android-11

出于某种原因,我真的在为此苦苦挣扎,希望有人能帮助我指出正确的方向。
我的目标是 Android 11/API 30,这似乎是所有问题的根源。降低目标可能对我有用 - 但似乎谷歌最终会迫使我走这条路,所以我不妨弄清楚这一点。
我的应用程序通常将文件写入标准

getExternalFilesDir(null)
这为我提供了设备上的路径,即
/storage/emulated/0/Android/data/com.domain.testapp/files
我还尝试了其他类型,例如:
getExternalFilesDir(Environment.DIRECTORY_PICTURES)
结果是
/storage/emulated/0/Android/data/com.domain.testapp/files/Documents
我的应用程序实际上将文件写入此位置没有问题。在 Android 11 中,我必须使用本地文件资源管理器跳过一些环节才能查看这些文件 - 但它们确实存在于设备上。
我现在正试图给用户一些查看文件和共享文件的能力,这就是我难住的地方!
下面的代码导致找不到文件
File filePath = this.getExternalFilesDir(null);
String filePathString = filePath.toString();

ArrayList<String> myData = new ArrayList<>();
File fileDir = new File(filePathString);

String[] files = fileDir.list();

if(files.length == 0){
    Log.w(APPID, "NO FILES IN FOLDER");
}
是的 - 我知道不需要 File 和 .toString() - 但我在每一步都将它们注销,因为我认为我疯了。
我知道一个事实,在这个应用程序中指向的文件夹中有十几个文件。这个应用程序创建了文件。不是应该能看到文件夹里的文件吗???
Manifest 具有以下权限 - 我认为它不需要所有权限:
<uses-permission android:name = "android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
没有权限显示为拒绝应用
我考虑过使用外部存储 - 但在 Android 11 中这似乎更难?或者这真的是一条更容易走的路吗?
我确实尝试过玩这个,但它似乎已被弃用并且很快就会消失?
File downloadFilePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
这是我设备上的这个文件夹
/storage/emulated/0/Download
而且我绝对可以使用任何文件资源管理器查看其中的文件。
有关如何访问此应用程序创建的文件的任何想法?
我可能错过了一些非常明显的东西。
欢迎提出任何建议!!

最佳答案

我想我有答案?
我对此了解得越多 - 似乎 Android 10 走了一条路,然后 Android 11 回溯了一点,并重新启用了一些直接文件路径访问。
希望我是对的,以后不必再回来重新做事
所以答案是在 Manifest 中使用 requestLegacyExternalStorage - 即使它有各种警告
然后我用这个在 Documents 中创建了一个文件夹

File filePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)+File.separator+"MyAppFolder");
filePath.mkdirs();
现在我可以写这个并从中读取。
无论如何 - 这似乎适用于我在 Android 9、10 和 11 上。所以希望这种趋势继续下去。

关于Android 11 - 访问我的应用程序 Android/Data 文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66947344/

相关文章:

android - libav sws_scale() 在真实设备上的色彩空间转换失败,适用于模拟器

java - PerformClick()方法不起作用,出现错误

android - 如何在Android上播放音频

c# - VB 到 C++ 或 C#?

android - Build.Gradle 中的库版本错误

file - Golang 如何在 Go 中读取输入文件名

c - 如何配置此错误以能够正确生成Makefile?

Android:Asus Nexus 7 在重启之前不会提交模拟内存

android - READ_EXTERNAL_STORAGE 在应用程序重新启动之前未分配

java - Android 的 READ_EXTERNAL_STORAGE 权限