Cordova 3.6.3文件插件 - 在android上获取本地视频文件

时间:2014-10-06 13:40:01

标签: javascript android cordova video cordova-plugins

我想做的是

  1. 通过cordovas javascript API
  2. 获取设备上的视频文件的URI
  3. 将URI设置为HTML5 video代码src属性的值。
  4. 第二部分应该不是问题 关于第一项任务,有很多很好的结构化教程,如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} - &gt; NOT_FOUND_ERR

    我做错了什么?如何导航到文件,或者在哪里可以找到它?

1 个答案:

答案 0 :(得分:6)

我明白了!

在cordova文件插件的android版本中有一个bug

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

XMLHttpRequest以及FileTransfer都可以解决问题。

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=="
  }
});