【问题标题】:Cordova 3.6.3 File plugin - get local video file on androidCordova 3.6.3 文件插件 - 在 android 上获取本地视频文件
【发布时间】:2014-10-06 13:40:00
【问题描述】:

我想做的是

  1. 通过cordovas 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

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

【问题讨论】:

    标签: javascript android cordova video cordova-plugins


    【解决方案1】:

    我想通了!

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

    解决方法是将文件从应用程序本身的资产目录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=="
      }
    });
    

    【讨论】:

    • 这段代码为我节省了很多时间来追逐自己的尾巴:) 谢谢@mab
    • 非常感谢!在我看到你的帖子之前,我为此浪费了一天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多