【问题标题】:Cordova Android FileReader.readAsDataURL NOT_FOUND_ERRCordova Android FileReader.readAsDataURL NOT_FOUND_ERR
【发布时间】:2019-06-09 02:06:17
【问题描述】:

我同时使用 cordova-plugin-filecordova-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 });
}

关于可能导致此问题的任何想法?以下是我尝试过的事情:

  1. <preference name="AndroidPersistentFileLocation" value="Compatibility" /> 添加到config.xml。此方法无效后删除。
  2. <access origin="cdvfile://*"/> 添加到config.xml。在这不起作用后删除。
  3. 确保的 CSP 包括 cdvfile:
  4. 确保AndroidManifest.xml 同时拥有android.permission.WRITE_EXTERNAL_STORAGEandroid.permission.READ_EXTERNAL_STORAGE
  5. 通过浏览文件应用程序验证视频确实存在于手机上。视频播放正常。

使用 Moto G6 在 Android 8 上进行测试。

提前致谢。

【问题讨论】:

    标签: android cordova cordova-plugin-file


    【解决方案1】:

    调试cordova-plugin-file后,我发现报告的NOT_FOUND_ERR具有误导性,因为原来是权限问题。

    我认为将读取外部存储的权限放在清单中就足够了,但事实并非如此。 Android 需要运行时权限:https://developer.android.com/training/permissions/requesting.html

    添加运行时权限后,视频捕获过程按预期工作。

    【讨论】:

    • 就我而言,我还必须添加“requestLegacyExternalStorage”。例如:
    • @a432511 我添加了运行时权限,但没有运气......你是如何设法看到实际错误的?
    • 嘿兄弟,你能帮帮我吗?如何添加运行时权限?
    • 嘿@Cesar,哦,朋友,谢谢你的成功!!!太棒了啊哈哈,我花了 2 天时间
    猜你喜欢
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多