【发布时间】:2017-08-29 01:18:17
【问题描述】:
我正在使用 QtCreator 和 Qt for android。
我正在尝试使用 QFileSystemModel 在 android 上制作一个文件对话框应用程序。
我正在手机上调试(HTC A9)。
除了我的包裹外,我在手机上看不到任何其他内容(QDir::currentPath()) 但是如果我设置为 QDir::rootPath(),文件对话框在开始时只显示 /(我尝试访问它后什么都没有)
控制台显示:
W libFileDialog.so: (null):0 ((null)): inotify_add_watch("/data/user") failed: "Permission denied"
W libFileDialog.so: (null):0 ((null)): inotify_add_watch("/data") 失败: "Permission denied"
W libFileDialog.so: (null):0 ((null)): inotify_add_watch("/") failed: "Permission denied"
W libFileDialog.so: (null):0 ((null)): inotify_add_watch("/data") 失败: "Permission denied"
W libFileDialog.so:(null):0((null)):inotify_add_watch(“/data/user”)失败:“权限被拒绝”
W libFileDialog.so: (null):0 ((null)): inotify_add_watch("/data/user/0") failed: "Permission denied"
我添加了权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
但它仍然说 inotify_add_watch failed blahblah...
它在 Windows 上运行良好。
如果我使用虚拟设备进行调试,它有时仍然会拒绝,但只有当我尝试将模型的根路径设置为某个名为(日期、配置...等)的目录时才会拒绝权限
我应该如何解决这个问题?
还是仅使用 C++ 编写 android 应用程序的问题,所以它告诉我去学习 JAVA?(我真的很想坚持 C++ :c)
代码:
_fileModel = new QFileSystemModel;
_fileModel->setReadOnly(false);
_fileModel->setRootPath(QDir::rootPath());
_fileModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Files);
ui->listView->setModel(_fileModel);
我在运行时需要请求权限后才读到。
我调用了静态java方法来请求权限,它被授予了,但我仍然看不到文件。 (唯一的区别是我可以在我的虚拟设备中看到 /sdcard。)
【问题讨论】:
-
这看起来像是基本的文件系统权限。您的进程的 PID 没有相关目录的读取权限。
标签: android c++ qt permissions