android - 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授予我对此文件夹的完全访问权限
编辑:我在谷歌的跟踪器上打开了问题,因为在我看来这是一个错误。您可以在那里找到用于复制的小型应用程序。你可以给这个问题加注星标,这样谷歌就可以更快地查看这个问题。
解决方案
推荐阅读
- javascript - 使用 AJAX 和 HTTP 请求实现搜索栏功能 - JavaScript
- asp.net-core - aspnet core 2.1中AddSignalR和AddSignalRCore扩展方法的区别
- xml - XML 中的元素发现无效内容
- python - 如何将python代码的输出重定向到文件
- c# - 替换整个或部分字符串
- html - UIKit:按钮没有出现
- spring - 当我有一个请求和多个返回时,如何将我的代码更改为 Spring Boot?
- windows - 从命令行添加 Windows 用户
- sql - sql - 将列(表之一的外键)添加到数据库中的所有表
- javascript - 如何在 javascript 中配置 babel7 以支持从 `export default` 中的 `import {}`