android inotify_add_watch失败:权限被拒绝?

时间:2017-08-27 13:34:49

标签: android c++ qt permissions

我正在使用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。)

1 个答案:

答案 0 :(得分:1)

我有使用inotify和FileObserver但不使用Qt的经验。但有些事情是全球性的,因为Sam说你没有root权限。这是一个操作系统保护,如果你有root access,它可能会工作,这可能是你的Windows模拟器上的情况(如果我理解正确)。您不应该依赖root访问权限,并且您的应用程序仅限于其自己的内部存储器和外部存储器,可以作为explaind here找到。

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