首页 > 解决方案 > Android 11 SAF - 本机 fdopendir + readdir 不显示完整文件列表

问题描述

在我的应用程序中,我使用本机函数fdopendir。从java我得到我放在这个函数中的文件描述符。使用它的结果,我可以读取目录的内容。在 android 11 上列出目录时,我只看到媒体文件。如何使用存储访问框架获取完整文件列表?

这是我的代码:

在本机代码中,我使用readdir遍历目录条目。dirp 是我自己的结构,其中包含指向标准 DIR 结构的指针。

struct dirent* dentry = readdir(dirp->dir);

为了获得 DIR 结构,我跳转到 Java 获取文件描述符

DIR *AndroidStorage_OpenDir(const char *folder) {
    jstring string = jvmEnv->NewStringUTF(folder);
    int fd = jvmEnv->CallIntMethod( jvmCallbackThread, JavaOpenDir, string);
    jvmEnv->DeleteLocalRef(string);
    return fdopendir(fd);
}

在 Java 中,我使用 SAF 方法获取整数文件描述符,然后将其返回给 c++

public static int openDir(String path) {
        Uri uri = uriCache.get(path);
        if (uri == null) {
            uri=getUri(path);
            uriCache.put(path, uri);
        }
    return resolver.openFileDescriptor(uri, "r").detachFd();
}

在 Android 10 及更低版本上运行良好。我应该在 android 11 上做什么来获取目录中的所有文件?用户使用Intent.ACTION_OPEN_DOCUMENT_TREE授予我对此文件夹的完全访问权限

编辑:我在谷歌的跟踪器上打开了问题,因为在我看来这是一个错误。您可以在那里找到用于复制的小型应用程序。你可以给这个问题加注星标,这样谷歌就可以更快地查看这个问题。

标签: androidc++directoryandroid-ndkstorage-access-framework

解决方案


推荐阅读