2017-08-27 195 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的包裝。