2017-08-27 28 views
0

私はアンドロイドのQtCreatorとQtを使用しています。
QFileSystemModelを使用してアンドロイドでファイルダイアログアプリケーションを作成しようとしていました。
私の電話(HTC A9)でデバッグしています。android inotify_add_watch failed:権限が拒否されましたか?

私のパッケージ(QDir :: currentPath())以外は私の電話で他のコンテンツを見ることができません QDir :: rootPath()に設定した場合、ファイルのダイアログには/私はそれにアクセスしようとした後)

コンソールを示しています

W libFileDialog.so:(ヌル):0((ヌル)):はinotify_add_watch( "/データ/ユーザー")が失敗しました:「許可拒否されました。
W libFileDialog.so:(null):0((null)):inotify_add_watch( "/ data")が失敗しました:「アクセスが拒否されました」
W libFileDia (null):0((null)):inotify_add_watch( "/ data"):エラーが発生しました。 ")失敗:"許可が拒否されました "
W libFileDialog.so:(null):0((null)):inotify_add_watch("/data/user ")失敗:"許可が拒否されました "
W libFileDialog.so:null 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上で動作します。 デバッグに仮想デバイスを使用すると、モデルのルートパスを(date、config ...など)という名前のディレクトリに設定しようとするとアクセス権が拒否されることがあります。
どうすればよいですか?
それとも、JAVAを学ぶために行くために私に言っていますので、(私は実際にC++に固執したい:C)のみC++でAndroidアプリのコーディングの問題です?

コード:

_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では経験がありません。しかし、サムがあなたが根絶する権限を持っていないと言ったように、グローバルなものもあります。これはOSの保護であり、Windowsのエミュレータの場合(正しく理解していれば)root accessがあると時々動作することがあります。あなたはルートにアクセスすることに頼るべきではなく、あなたのアプリケーションは自身の内部メモリと外部メモリに限定されており、説明書hereとして見つけることができます。

質問に答えるには、Javaを学ぶ必要はありません.FileObserverはOS(Linux)APIであるinotify APIのラッパーです。

関連する問題