【发布时间】:2019-06-09 02:06:17
【问题描述】:
我同时使用 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 - 通过浏览文件应用程序验证视频确实存在于手机上。视频播放正常。
使用 Moto G6 在 Android 8 上进行测试。
提前致谢。
【问题讨论】:
标签: android cordova cordova-plugin-file