android - Cordova 安卓 FileReader.readAsDataURL NOT_FOUND_ERR

标签 android cordova cordova-plugin-file

我同时使用 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. 通过浏览"file"应用验证手机上确实存在这些视频。视频播放得很好。

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

提前致谢。

最佳答案

调试 cordova-plugin-file 后,我发现报告的 NOT_FOUND_ERR 具有误导性,因为事实证明存在权限问题。

cordova-plugin-file error

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

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

关于android - Cordova 安卓 FileReader.readAsDataURL NOT_FOUND_ERR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56511450/

相关文章:

cordova - resolveLocalFileSystemURL 不是一个函数 - Angular2

android - 具有相同 key 的多个条目 : FirebaseInstanceId

java - 如何在 android 2.2.2 (Froyo) 中使用 BitmapRegionDecoder 代码?

ios - 设置 AutoHideSplashScreen 在 Cordova 3.0.0 for iOS 中无效

javascript - Cordova + RequireJS : How load the File-Plugin

Android EditText 文字颜色在打字时自动改变

java - 媒体播放器错误 -38,0

android - Howler JS 2.0-Cordova,Android,设备上未播放声音

ionic2 - Ionic 2/cordova-plugin-file File.writeFile() 拒绝正确创建二进制文件(png 图像)