2017-08-27 163 views
0

我正在使用QtCreator和Qt的机器人。
我正试图使用​​QFileSystemModel在Android上创建文件对话框应用程序。
而我正在调试我的手机(HTC A9)。android inotify_add_watch失败:权限被拒绝?

我看不到我的手机上的任何其他内容,除了我的包(QDir :: currentPath()) ,但如果我设置为QDir :: rootPath(),文件对话框只显示/之后我尝试访问它)

控制台显示:

W¯¯libFileDialog.so:(空):0((空)):inotify_add_watch( “/数据/用户”)失败:“权限被拒绝“
W libFileDialog.so:(null):0((null)):inotify_add_watch(”/ data“)失败:”权限被拒绝“
W libFileDia ():0((null)):inotify_add_watch(“/”)失败:“权限被拒绝”
W libFileDialog.so:(null):0 “):失败:”权限被拒绝“
W libFileDialog.so:(null):0((null)):inotify_add_watch(”/ data/user“)失败: ):0((空)):inotify_add_watch( “/数据/用户/ 0”)失败: “权限被拒绝”

我添加权限

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

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

但它仍然说inotify_add_watc h失败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。)

+0

这看起来像基本的文件系统权限。您的进程的PID对相关目录没有读取权限。 –

回答

1

我有inotify和FileObserver的经验,但没有使用Qt。但有些事情是全球性的,因为山姆说你没有权限根。这是一种操作系统保护,如果您有root access,它可能会有效,这可能是您的Windows模拟器(如果我理解正确的话)。你不应该依赖于root权限,你的应用程序仅限于自己的内部存储器和外部存储器,可以通过解释here找到。

无论如何回答你的问题,你不需要学习java,FileObserver只是一个OS(linux)api的inotify api的包装。