Android ContentResolver openInputStream выдает исключение FileNotFoundException из-за разрешений?

Я создаю приложение с использованием act-native и сталкиваюсь со странной ошибкой. Для чтения аудиофайлов в файловой системе я использую встроенную библиотеку реагирования под названием act-native-fs, но похоже, что плагин не работает для любого аудиофайла, хотя он работает и для текстовых файлов. Я отладил свое приложение для Android в Android Studio и отследил ошибку до следующей функции:

private InputStream getInputStream(String filepath) throws IORejectionException 
{
    Uri uri = getFileUri(filepath);
    InputStream stream;
    try 
    {
        stream = reactContext.getContentResolver().openInputStream(uri);
    } 
    catch (FileNotFoundException ex) 
    {
        throw new IORejectionException("ENOENT", "ENOENT: no such file or directory, open '" + filepath + "'");
    }

    if (stream == null) 
    {
        throw new IORejectionException("ENOENT", "ENOENT: could not open an input stream for '" + filepath + "'");
    }

    return stream;
}

В частности, метод openInputStream создает исключение FileNotFoundException, когда аргумент filePath указывает на аудиофайл (например, файл.wav), но не когда он указывает на текстовый файл в том же месте. Я гарантировал, что у меня есть разрешения WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE, и что я запросил разрешения для Android 23+. И я также уверен, что файлы действительно существуют. Вот снимок экрана моего окна просмотра, который показывает точную ошибку и результат проверок существования для аудиофайла и текстового файла:

Окно отладки

В частности, исключение выдается в следующей строке:

stream = ReactionContext.getContentResolver().openInputStream(uri);

А вот полная трассировка стека FileNotFoundException:

libcore.io.IoBridge.open(IoBridge.java:452), 
java.io.FileInputStream.<init>(FileInputStream.java:76),
java.io.FileInputStream.<init>(FileInputStream.java:103),
android.content.ContentResolver.openInputStream(ContentResolver.java:660),
com.rnfs.RNFSManager.getInputStream(RNFSManager.java:101),
com.rnfs.RNFSManager.readFile(RNFSManager.java:214), 
java.lang.reflect.Method.invoke(Native Method),
com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372),
com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160),
com.facebook.react.bridge.queue.NativeRunnable.run(Native Method),
android.os.Handler.handleCallback(Handler.java:739),
android.os.Handler.dispatchMessage(Handler.java:95),
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29), 
android.os.Looper.loop(Looper.java:148), com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:    192), 
java.lang.Thread.run(Thread.java:818)

Любая помощь с благодарностью. Спасибо

0 ответов

Другие вопросы по тегам