У меня есть два вопроса, и чтобы прояснить мою проблему, вот короткий фрагмент кода:
ContentResolver resolver = context.getContentResolver();
DocumentsContract.deleteDocument(resolver, documentUri);
resolver.openFileDescriptor(documentUri, "rw");
В документации говорится, что последняя строка «Выдает исключение FileNotFoundException, если в URI нет файла или режим недействителен».
Но на самом деле я получаю java.lang.IllegalArgumentException
.
(Вопрос 1) Это ошибка или нормально?
(Вопрос 2) openFileDescriptor()
, очевидно, не является хорошим методом проверки существования документа. Каков "официальный" способ сделать это?
Изменить (добавлен журнал ошибок):
W/System.err: java.lang.IllegalArgumentException: не удалось определить, является ли 9016-4EF8:myFolder/file1.wav дочерним элементом 9016-4EF8:myFolder: java.io.FileNotFoundException: отсутствует файл для 9016-4EF8:myFolder/file1 .wav в /storage/extSdCard/myFolder/file1.wav
W/System.err: в android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167)
W/System.err: в android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(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="content://com.android.externalstorage.documents/tree/9016-4EF8%3AmyFolder/document/9016-4EF8%3AmyFolder%2Ffile1.wav"
documentUri
. Это баг или нормально? -- мы не можем сказать, не видя всей трассировки стека Java и не зная, откуда вы взялиdocumentUri
. Каков «официальный» способ сделать это? -- Я бы использовалexists()
наDocumentFile
а>. - person CommonsWare   schedule 15.07.2016documentUri
, тогда характер фактического документа не должен иметь отношения кopenFileDescriptor
, не так ли? И по поводуDocumentFile
: я успешно избежал этого и интересно, теперь я вынужден включать его только из-заexists()
? - person red symbol man   schedule 15.07.2016