在WebView中访问getExternalFilesDir

时间:2014-04-08 13:05:15

标签: android html5 cordova webview

我有一个Android应用,可以将视频文件写入getExternalFilesDir提供的文件夹中。当我调试应用程序时,我可以看到它们存储在/storage/emulated/0/Android/data/com.my.app/files/文件夹中。

现在,在WebView中,如果我将HTML5视频标记指向该文件夹中的文件,它就可以工作......但它是硬编码的,所以我想通过JavaScript获取该文件夹名称(因为我认为它可能会有所不同,具体取决于在设备上。)

我一直在使用window.requestFileSystem来获取位置,但它似乎省略了/storage/emulated/0部分,只是给了我//Android/data/com.my.app/files/

我认为我遗漏了一些非常基本的东西。有什么想法/意见吗?代码如下:

复制文件的Java代码:

File path = getExternalFilesDir(null);
File file = new File(path, justTheFileName);
Log.w(TAG, "Location of File: " + file.toString());
try {
    out = new FileOutputStream(file);
} catch (Exception e) {
    Log.e(TAG, "ERROR WITH out = new FileOutputStream(file);");
    e.printStackTrace();
}
byte[] data;
if ( in == null || out == null) {
    Log.w(TAG, "Uh oh... " + justTheFileName + " has nulls...");
}
try {
    data = new byte[ in .available()]; in .read(data);
    out.write(data); in .close();
    out.close();
} catch (IOException e1) {
    e1.printStackTrace();
}

访问文件系统的JavaScript代码

function deviceIsReady() {
    window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
    var attempts = 0;
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, setFS, fail);
    alert("Requested fileSystem");
}

function setFS(fileSystem) {
    window.rootFS = fileSystem.root;
    fileSystem.root.getDirectory("Android/data/com.my.app/files", {
        create: true,
        exclusive: false
    }, function(dirEntry) {
        alert('dirEntry');
        rootPath = dirEntry.fullPath;
        alert(rootPath);
        // Test code.
        window.location.replace(rootPath + '/my-cool-video.mp4');
    }, fail);
}

我想我要问的是......如何从JavaScript中获取/storage/emulated/0

(请注意,应用清单XML文件具有相应的读/写权限)

0 个答案:

没有答案