我正在使用QtCreator和Qt for android 我试图使用QFileSystemModel在android上创建一个文件对话框应用程序 我正在手机上调试(HTC A9)。
除了我的包(QDir :: currentPath())外,我在手机上看不到任何其他内容 但如果我设置为QDir :: rootPath(),文件对话框只显示/开头时(我尝试访问它后没有任何内容)
控制台显示:
W libFileDialog.so:(null):0((null)):inotify_add_watch(“/ data / user”)失败:“权限被拒绝”
W libFileDialog.so :( null):0((null)):inotify_add_watch(“/ data”)失败:“权限被拒绝”
W libFileDialog.so:(null):0((null)):inotify_add_watch(“/”)失败:“权限被拒绝”
W libFileDialog.so :( null):0((null)):inotify_add_watch(“/ data”)失败:“权限被拒绝”
W libFileDialog.so:(null):0((null)):inotify_add_watch(“/ data / user”)失败:“权限被拒绝”
W libFileDialog.so:(null):0((null)):inotify_add_watch(“/ data / user / 0”)失败:“Permission denied”
我添加了权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
但它仍然说inotify_add_watch失败了blahblah ...
它在Windows上完全正常工作。
如果我使用虚拟设备进行调试,它仍然有时会拒绝,但只有在我尝试将模型的根路径设置为某个名为(date,config ...等)的目录时才会拒绝权限。
我该如何解决这个问题?
或者是用仅使用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 :(得分:1)
我有使用inotify和FileObserver但不使用Qt的经验。但有些事情是全球性的,因为Sam说你没有root权限。这是一个操作系统保护,如果你有root access,它可能会工作,这可能是你的Windows模拟器上的情况(如果我理解正确)。您不应该依赖root访问权限,并且您的应用程序仅限于其自己的内部存储器和外部存储器,可以作为explaind here找到。
无论如何要回答你的问题,你不需要学习java,FileObserver只是inotify api的一个包装器,它是一个OS(linux)api。