我正在try 递归地读取给定的目录并查找所有文件夹和文件.已找到目录和子目录,但找不到文件.

我的虚拟设备上的存储 struct :

Local storage

用于"遍历给定目录"的代码

import android.util.Log
import java.io.File

// path = "/storage/1B10-1D17/ReadTest/"

class FileHelper {
    fun walkTest(path: String){
        File(path).walkTopDown().forEach {
//            println(it)
            Log.e("walkTest extension", it.extension)
            if(it.isDirectory){
                Log.e("walkTest", "Directory: ${it.name}")
            }else{
                Log.e("walkTest", "File: ${it.name}")
            }
        }
    }
}

这将输出以下内容:

E/walkTest extension: 
E/walkTest: Directory: ReadTest
E/walkTest extension: 
E/walkTest: Directory: SubFolder

在我的Android list 文件中,我有以下行,权限被授予:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

我的代码中有什么缺陷,我如何找到存储在这些目录中的三个pdf文件?

Update 1/2
As can be seen in the screenshot below, the media access is granted: enter image description here

如果我运行以下命令(按照danfirst的建议),我会得到以下输出,其中显示了该pdf文件:

> adb shell ls /storage/1B10-1D17/ReadTest/
File_1.pdf
SubFolder

推荐答案

您通常无权访问可移动存储上的任意文件.这不会因READ_EXTERNAL_STORAGE的变化而改变.

您建议的解决方案是使用MANAGE_EXTERNAL_STORAGE.从技术上讲,这是可行的,对于个人使用的应用程序来说,这是一个很好的解决方案.如果你打算分发这款应用程序,你需要向谷歌(也许还有其他应用程序store )提交书面文件,证明你使用这一许可的合理性.不同意你的理由的store 可能会 Select 不分发你的应用程序.

或者,您可以使用存储访问框架.使用ACTION_OPEN_DOCUMENT_TREE/ActivityResultContracts.OpenDocumentTree,让用户决定用户希望您的应用程序在用户设备(或用户的云存储)上的哪个位置访问用户的内容.然后,您可以使用DocumentFile遍历文档树以查找子树和文档.

Android相关问答推荐

如何在Android Room中使用@Relation多对一查询

如何使用Jetpack Compose使水平pager 显示离屏页面?

Android开发:主题排版不适用于按钮文本

Android Gradle/Groovy,如何将文件复制到APK

在Jetpack Compose中的隐藏状态栏后面绘制

如何在Android中将以前的数据保存在复选框中?

使用 JNI 从 Android 应用程序中使用 Kotlin/Native 预构建共享库

使用lazyColumn迁移paging3的旧代码

Jetpack Compose 使用 SavedStateHandle 发送返回结果不适用于 ViewModel 中注入的 SavedStateHandle

无法插入 LayoutNode@cc72396 子级,因为它已有父级

如何从 firebase 实时数据库中检索最后一个值

修复错误 Invariant Violation: requireNativeComponent: "RNSScreenStackHeaderConfig" was not found in the UIManager

如何放置在柱子的角落(底端)

无法通过 retrofit 解析对 kotlin 数据类的 xml 响应

try 使用 ViewPager2 实现滑动视图时出现类型不匹配错误

JCenter 是否永久关闭(10 月 31 日)?

在 Kotlin 中打开新片段时如何对当前片段应用更改?

将应用更改为暗模式后 Android MainActivity 数据泄漏

Android build gradle 文件版本代码自动递增

Android Jetpack Compose - 每次文本字段值更改时,可组合函数都会重新组合