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)
Любая помощь с благодарностью. Спасибо