Cordova 3.6.3文件插件 - 在安卓设备上获取本地视频文件

3
我想做的是:
  1. 通过Cordova的JavaScript API获取设备上视频文件的URI。
  2. 将URI设置为HTML5 video标签的src属性的值。
第二部分不应该有问题。 关于第一个任务,有很多好的结构化教程,比如 Raymond Camden's演示了如何在 Cordova环境中通过JavaScript获取本地文件。
然而,在最新版本的Cordova中,我无法让它工作。

视频文件

视频文件位于内置apk文件的assets/www/videos/testvid.webmres/raw/testvid.webm中。两种变体都没有起作用。

JavaScript

myPath = cordova.file.applicationDirectory; // -> file:///android_asset/
//myPath += "www/videos/testvid.webm";

分别地

myPath = cordova.file.applicationStorageDirectory; // -> file:///data/data/com.example.MyPackage/
//myPath += "raw/testvid.webm";

然后:

window.resolveLocalFileSystemURL(myPath, gotFile, fail);
function gotFile(entry){
  if(entry.isDirectory)
    alert JSON.stringify(entry.getFile("testvid.webm"));
}

权限

res/xml/config.xml中添加了访问权限。

<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,root" />

错误是{code:1} -> NOT_FOUND_ERR。
我做错了什么?如何导航到文件,或者在哪里可以放置它以便找到?
1个回答

8

我想通了!

cordova文件插件的安卓版本存在漏洞

解决方法是将文件从应用程序本身的资产目录file:///android_asset/(cordova.file.applicationDirectory)转移到手机上的工作目录file:///data/data/com.example.MyPackage/files(cordova.file.dataDirectory)。然后将视频的源URL设置为这个新文件。

XMLHttpRequestFileTransfer都可以解决问题。

var myFilename = "testvid.webm";
var myUrl = cordova.file.applicationDirectory + "www/videos/" + myFilename;
var fileTransfer = new FileTransfer();
var filePath = cordova.file.dataDirectory + myFilename;

fileTransfer.download(encodeURI(myUrl), filePath, (function(entry) {
  /*
  res = "download complete:\n"
  res += "fullPath: " + entry.fullPath + "\n"
  res += "localURL: " + entry.localURL + "\n"
  alert(res += "nativeURL: " + entry.nativeURL + "\n")
   */
  var vid = document.getElementById("someID");
  vid.src = entry.nativeURL;
  vid.loop = true;
}), (function(error) {
  alert("Video download error: source " + error.source);
  alert("Video download error: target " + error.target);
}), true, {
  headers: {
    Authorization: "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
  }
});

1
这段代码节省了我很多时间,避免了不必要的错误。谢谢 @mab - Ranjith Varatharajan
1
非常感谢!在看到你的帖子之前,我浪费了一整天的时间。 - Gregory Kapustin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接