Я использую cordova-plugin-file
и cordova-plugin-media-capture
для захвата видео на iOS и Android. Эта реализация прекрасно работает на iOS, но не на Android. Я отследил проблему, когда экземпляр FileReader
не смог найти файл, записанный cordova-plugin-media-capture
. Вот блок кода:
if (navigator && navigator.device.capture && window.cordova.file) {
navigator.device.capture.captureVideo((mediaFiles: MediaFile[]) => {
if (mediaFiles.length > 0) {
const mediaFile = mediaFiles[0];
const type = mediaFile.type;
window.resolveLocalFileSystemURL((mediaFile as any).localURL, (fileEntry: Entry) => {
(fileEntry as FileEntry).file((file: File) => {
// "file" is a valid file with a local URL (cdvfile://localhost/sdcard/DCIM/....)
const fileReader = new FileReader();
fileReader.onloadend = (event: ProgressEvent) => {
console.log(event);
// event.target.error = 1 here which according to the docs is NOT_FOUND_ERR
success({ data: (event.target as any).result, type });
};
fileReader.readAsDataURL(file);
}, (_error: FileError) => {
console.log(_error);
});
}, (_error: FileError) => {
console.log(_error);
});
}
}, (_error: CaptureError) => {
console.log(_error);
}, { limit: 1, duration: 10, quality: 1 });
}
Есть идеи, что может быть причиной этого? Вот что я пробовал:
- Добавлено
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
к config.xml
. Удалено после того, как этот подход не работает.
- Добавлено
<access origin="cdvfile://*"/>
в config.xml
. Удалено после того, как это не сработало.
- Гарантированный CSP включает
cdvfile:
- Гарантировано
AndroidManifest.xml
имеет android.permission.WRITE_EXTERNAL_STORAGE
и android.permission.READ_EXTERNAL_STORAGE
- Подтверждено, что видео действительно существуют на телефоне, просмотрев приложение Файлы. Видео воспроизводится просто отлично.
Тестирование на Android 8 с Moto G6.
Заранее спасибо.