私は2つの質問があり、そしてここに私の問題が明らかに短いコードスニペット作るために:「何のファイルは、URIの下に存在しないかのモードが無効な場合にFileNotFoundExceptionをスロー」最後の行はなぜContentResolver.openFileDescriptorがIllegalArgumentExceptionをスローしますか?出口?
ContentResolver resolver = context.getContentResolver();
DocumentsContract.deleteDocument(resolver, documentUri);
resolver.openFileDescriptor(documentUri, "rw");
ドキュメントサイスを
実際には私はjava.lang.IllegalArgumentException
を取得します。
(質問1)これはバグですか、OKですか?
(質問2)openFileDescriptor()
は明らかにドキュメントが存在するかどうかをテストする良い方法ではありません。それを行うための「正式な」方法は何ですか?
編集(追加のエラーログ):
W/System.errの:java.lang.IllegalArgumentExceptionが:9016-4EF8かどうかを判断するために失敗しました:MYFOLDER/file1.wavが9016-4EF8の子である:MYFOLDER :java.io.FileNotFoundException:/storage/extSdCard/myFolder/file1.wav
W/System.errのではMyFolder/file1.wav:9016-4EF8用のファイルが見つからないandroid.database.DatabaseUtils.readExceptionFromParcelで(DatabaseUtils .java:167)
W/System.err:android.database.DatabaseUtils.readExceptionWithFileNotFoundE xceptionFromParcel(DatabaseUtils.java:148)
W/System.errの:android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:618)
W/System.errので:android.content.ContentResolverました。 openAssetFileDescriptor(ContentResolver.java:945)
W/System.errの:android.content.ContentResolver.openFileDescriptor(ContentResolver.java:784)
W/System.errので:android.content.ContentResolverました。 openFileDescriptor(ContentResolver.java:739)
そして:
documentUri = "内容://com.android.externalstorage.documents/tree/9016-4EF8%3AmyFolder/document/9016-4EF8%3AmyFolder%2Ffile1.wav"
「しかし、実際に私はjava.lang.IllegalArgumentExceptionが取得」 - 私は、ステートメントと一緒に、あなたがあなたの質問を編集して、全体のJavaスタックトレースを投稿することをお勧めしますどこから 'documentUri'を取得したのでしょうか。 「これはバグですか、OKですか?」 - Javaスタックトレース全体を見ることなく、 'documentUri'がどこから得られたのかを知ることができません。 "それを行うための「正式な」方法は何ですか? - [DocumentFile'](https://developer.android.com/reference/android/support/v4/provider/DocumentFile.html#exists())に['exists()'を使用します。 – CommonsWare
'documentUri'で特定された文書を問題なく削除できるのであれば、実際の文書の性質は' openFileDescriptor'とは関係がありませんか?そして 'DocumentFile'について:これを避けることに成功しました。なぜなら、' exists() 'のためだけにそれを含めることを余儀なくされているのでしょうか? –